/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "orc/ColumnPrinter.hh"
#include "orc/OrcFile.hh"

#include "Adaptor.hh"
#include "gzip.hh"
#include "ToolTest.hh"

#include "wrap/gmock.h"
#include "wrap/gtest-wrapper.h"

#ifdef __clang__
  DIAGNOSTIC_IGNORE("-Wmissing-variable-declarations")
#endif

namespace orc {

  class OrcFileDescription {
  public:
    std::string filename;
    std::string json;
    std::string typeString;
    std::string formatVersion;
    uint64_t rowCount;
    uint64_t contentLength;
    uint64_t stripeCount;
    CompressionKind compression;
    size_t compressionSize;
    uint64_t rowIndexStride;
    std::map<std::string, std::string> userMeta;

    OrcFileDescription(const std::string& _filename,
                       const std::string& _json,
                       const std::string& _typeString,
                       const std::string& _version,
                       uint64_t _rowCount,
                       uint64_t _contentLength,
                       uint64_t _stripeCount,
                       CompressionKind _compression,
                       size_t _compressionSize,
                       uint64_t _rowIndexStride,
                       const std::map<std::string, std::string>& _meta
                       ): filename(_filename),
                          json(_json),
                          typeString(_typeString),
                          formatVersion(_version),
                          rowCount(_rowCount),
                          contentLength(_contentLength),
                          stripeCount(_stripeCount),
                          compression(_compression),
                          compressionSize(_compressionSize),
                          rowIndexStride(_rowIndexStride),
                          userMeta(_meta) {
      // PASS
    }

    friend std::ostream& operator<< (std::ostream& stream,
                                     OrcFileDescription const& obj);
  };

  std::ostream& operator<< (std::ostream& stream,
                            OrcFileDescription const& obj) {
    stream << obj.filename;
    return stream;
  }

  class FileParam: public testing::TestWithParam<OrcFileDescription> {
  public:
    virtual ~FileParam();

    std::string getFilename() {
      return findExample(GetParam().filename);
    }

    std::string getJsonFilename() {
      return findExample("expected/" + GetParam().json);
    }
  };

  FileParam::~FileParam() {
    // PASS
  }

  TEST_P(FileParam, Metadata) {
    orc::ReaderOptions readerOpts;
    std::unique_ptr<Reader> reader =
      createReader(readLocalFile(getFilename()), readerOpts);
    std::unique_ptr<RowReader> rowReader = reader->createRowReader();

    EXPECT_EQ(GetParam().compression, reader->getCompression());
    EXPECT_EQ(GetParam().compressionSize, reader->getCompressionSize());
    EXPECT_EQ(GetParam().stripeCount, reader->getNumberOfStripes());
    EXPECT_EQ(GetParam().rowCount, reader->getNumberOfRows());
    EXPECT_EQ(GetParam().rowIndexStride, reader->getRowIndexStride());
    EXPECT_EQ(GetParam().contentLength, reader->getContentLength());
    EXPECT_EQ(GetParam().formatVersion, reader->getFormatVersion().toString());
    EXPECT_EQ(getFilename(), reader->getStreamName());
    EXPECT_EQ(GetParam().userMeta.size(), reader->getMetadataKeys().size());
    for(std::map<std::string, std::string>::const_iterator itr =
          GetParam().userMeta.begin();
        itr != GetParam().userMeta.end();
        ++itr) {
      ASSERT_EQ(true, reader->hasMetadataValue(itr->first));
      std::string val = reader->getMetadataValue(itr->first);
      EXPECT_EQ(itr->second, val);
    }
    EXPECT_EQ(true, !reader->hasMetadataValue("foo"));
    EXPECT_EQ(18446744073709551615UL, rowReader->getRowNumber());

    EXPECT_EQ(GetParam().typeString, reader->getType().toString());
  }

  TEST_P(FileParam, Contents) {
    orc::ReaderOptions readerOpts;
    std::unique_ptr<RowReader> rowReader =
         createReader(readLocalFile(getFilename()), readerOpts)->createRowReader();

    unsigned long rowCount = 0;
    std::unique_ptr<ColumnVectorBatch> batch = rowReader->createRowBatch(1024);
    std::string line;
    std::unique_ptr<orc::ColumnPrinter> printer =
      orc::createColumnPrinter(line, &rowReader->getSelectedType());
    GzipTextReader expected(getJsonFilename());
    std::string expectedLine;
    while (rowReader->next(*batch)) {
      EXPECT_EQ(rowCount, rowReader->getRowNumber());
      printer->reset(*batch);
      for(size_t i=0; i < batch->numElements; ++i) {
        ASSERT_EQ(true, expected.nextLine(expectedLine));
        line.clear();
        printer->printRow(i);
        EXPECT_EQ(expectedLine, line)
          << "wrong output at row " << (rowCount + i);
      }
      rowCount += batch->numElements;
    }
    EXPECT_EQ(GetParam().rowCount, rowCount);
    EXPECT_EQ(GetParam().rowCount, rowReader->getRowNumber());
  }

  std::map<std::string, std::string> makeMetadata();

  INSTANTIATE_TEST_CASE_P(TestMatchParam, FileParam,
    testing::Values(
                    OrcFileDescription("TestOrcFile.columnProjection.orc",
                                       "TestOrcFile.columnProjection.jsn.gz",
                                       "struct<int1:int,string1:string>",
                                       "0.12",
                                       21000,
                                       428406,
                                       5,
                                       CompressionKind_NONE,
                                       262144,
                                       1000,
                                       std::map<std::string, std::string>()),
                    OrcFileDescription("TestOrcFile.emptyFile.orc",
                                       "TestOrcFile.emptyFile.jsn.gz",
                                       "struct<boolean1:boolean,byte1:tinyint,"
                                       "short1:smallint,int1:int,long1:bigint,"
                                       "float1:float,double1:double,"
                                       "bytes1:binary,string1:string,"
                                       "middle:struct<list:array<struct<"
                                       "int1:int,string1:string>>>,"
                                       "list:array<struct<int1:int,string1:"
                                       "string>>,map:map<string,struct<int1:"
                                       "int,string1:string>>>",
                                       "0.12",
                                       0,
                                       3,
                                       0,
                                       CompressionKind_NONE,
                                       262144,
                                       10000,
                                       std::map<std::string, std::string>()),
                    OrcFileDescription("TestOrcFile.metaData.orc",
                                       "TestOrcFile.metaData.jsn.gz",
                                       "struct<boolean1:boolean,byte1:tinyint,"
                                       "short1:smallint,int1:int,long1:bigint,"
                                       "float1:float,double1:double,"
                                       "bytes1:binary,string1:string,"
                                       "middle:struct<list:array<struct<"
                                       "int1:int,string1:string>>>,"
                                       "list:array<struct<int1:int,string1:"
                                       "string>>,map:map<string,struct<int1:"
                                       "int,string1:string>>>",
                                       "0.12",
                                       1,
                                       980,
                                       1,
                                       CompressionKind_NONE,
                                       262144,
                                       10000,
                                       makeMetadata()),
                    OrcFileDescription("TestOrcFile.test1.orc",
                                       "TestOrcFile.test1.jsn.gz",
                                       "struct<boolean1:boolean,byte1:tinyint,"
                                       "short1:smallint,int1:int,long1:bigint,"
                                       "float1:float,double1:double,"
                                       "bytes1:binary,string1:string,"
                                       "middle:struct<list:array<struct<"
                                       "int1:int,string1:string>>>,"
                                       "list:array<struct<int1:int,string1:"
                                       "string>>,map:map<string,struct<int1:"
                                       "int,string1:string>>>",
                                       "0.12",
                                       2,
                                       1015,
                                       1,
                                       CompressionKind_ZLIB,
                                       10000,
                                       10000,
                                       std::map<std::string, std::string>()),
                    OrcFileDescription("TestOrcFile.testMemoryManagementV11"
                                       ".orc",
                                       "TestOrcFile.testMemoryManagementV11"
                                       ".jsn.gz",
                                       "struct<int1:int,string1:string>",
                                       "0.11",
                                       2500,
                                       18779,
                                       25,
                                       CompressionKind_NONE,
                                       262144,
                                       0,
                                       std::map<std::string, std::string>()),
                    OrcFileDescription("TestOrcFile.testMemoryManagementV12"
                                       ".orc",
                                       "TestOrcFile.testMemoryManagementV12"
                                       ".jsn.gz",
                                       "struct<int1:int,string1:string>",
                                       "0.12",
                                       2500,
                                       10618,
                                       4,
                                       CompressionKind_NONE,
                                       262144,
                                       0,
                                       std::map<std::string, std::string>()),
                    OrcFileDescription("TestOrcFile.testPredicatePushdown.orc",
                                       "TestOrcFile.testPredicatePushdown"
                                       ".jsn.gz",
                                       "struct<int1:int,string1:string>",
                                       "0.12",
                                       3500,
                                       15529,
                                       1,
                                       CompressionKind_NONE,
                                       262144,
                                       1000,
                                       std::map<std::string, std::string>()),
                    OrcFileDescription("TestOrcFile.testSeek.orc",
                                       "TestOrcFile.testSeek.jsn.gz",
                                       "struct<boolean1:boolean,byte1:tinyint,"
                                       "short1:smallint,int1:int,long1:bigint,"
                                       "float1:float,double1:double,bytes1:"
                                       "binary,string1:string,middle:struct<"
                                       "list:array<struct<int1:int,string1:"
                                       "string>>>,list:array<struct<int1:int,"
                                       "string1:string>>,map:map<string,"
                                       "struct<int1:int,string1:string>>>",
                                       "0.12",
                                       32768,
                                       1896379,
                                       7,
                                       CompressionKind_ZLIB,
                                       65536,
                                       1000,
                                       std::map<std::string, std::string>()),
                    OrcFileDescription("TestOrcFile.testSnappy.orc",
                                       "TestOrcFile.testSnappy.jsn.gz",
                                       "struct<int1:int,string1:string>",
                                       "0.12",
                                       10000,
                                       126061,
                                       2,
                                       CompressionKind_SNAPPY,
                                       100,
                                       10000,
                                       std::map<std::string, std::string>()),
                    OrcFileDescription("TestOrcFile.testStringAndBinaryStat"
                                       "istics.orc",
                                       "TestOrcFile.testStringAndBinaryStat"
                                       "istics.jsn.gz",
                                       "struct<bytes1:binary,string1:string>",
                                       "0.12",
                                       4,
                                       185,
                                       1,
                                       CompressionKind_ZLIB,
                                       10000,
                                       10000,
                                       std::map<std::string, std::string>()),
                    OrcFileDescription("TestOrcFile.testStripeLevelStats.orc",
                                       "TestOrcFile.testStripeLevelStats"
                                       ".jsn.gz",
                                       "struct<int1:int,string1:string>",
                                       "0.12",
                                       11000,
                                       597,
                                       3,
                                       CompressionKind_ZLIB,
                                       10000,
                                       10000,
                                       std::map<std::string, std::string>()),
                    OrcFileDescription("TestOrcFile.testTimestamp.orc",
                                       "TestOrcFile.testTimestamp.jsn.gz",
                                       "timestamp",
                                       "0.11",
                                       12,
                                       188,
                                       1,
                                       CompressionKind_ZLIB,
                                       10000,
                                       10000,
                                       std::map<std::string, std::string>()),
                    OrcFileDescription("TestOrcFile.testUnionAndTimestamp.orc",
                                       "TestOrcFile.testUnionAndTimestamp"
                                       ".jsn.gz",
                                       "struct<time:timestamp,union:uniontype"
                                       "<int,string>,decimal:decimal(38,18)>",
                                       "0.12",
                                       5077,
                                       20906,
                                       2,
                                       CompressionKind_NONE,
                                       262144,
                                       10000,
                                       std::map<std::string, std::string>()),
                    OrcFileDescription("TestOrcFile.testWithoutIndex.orc",
                                       "TestOrcFile.testWithoutIndex.jsn.gz",
                                       "struct<int1:int,string1:string>",
                                       "0.12",
                                       50000,
                                       214643,
                                       10,
                                       CompressionKind_SNAPPY,
                                       1000,
                                       0,
                                       std::map<std::string, std::string>()),
                    OrcFileDescription("decimal.orc",
                                       "decimal.jsn.gz",
                                       "struct<_col0:decimal(10,5)>",
                                       "0.12",
                                       6000,
                                       16186,
                                       1,
                                       CompressionKind_NONE,
                                       262144,
                                       10000,
                                       std::map<std::string, std::string>()),
                    OrcFileDescription("demo-11-none.orc",
                                       "demo-12-zlib.jsn.gz",
                                       ("struct<_col0:int,_col1:string,"
                                        "_col2:string,_col3:string,_col4:int,"
                                        "_col5:string,_col6:int,_col7:int,"
                                        "_col8:int>"),
                                       "0.11",
                                       1920800,
                                       5069718,
                                       385,
                                       CompressionKind_NONE,
                                       262144,
                                       10000,
                                       std::map<std::string, std::string>()),
                    OrcFileDescription("demo-11-zlib.orc",
                                       "demo-12-zlib.jsn.gz",
                                       ("struct<_col0:int,_col1:string,"
                                        "_col2:string,_col3:string,_col4:int,"
                                        "_col5:string,_col6:int,_col7:int,"
                                        "_col8:int>"),
                                       "0.11",
                                       1920800,
                                       396823,
                                       385,
                                       CompressionKind_ZLIB,
                                       262144,
                                       10000,
                                       std::map<std::string, std::string>()),
                    OrcFileDescription("demo-12-zlib.orc",
                                       "demo-12-zlib.jsn.gz",
                                       ("struct<_col0:int,_col1:string,"
                                        "_col2:string,_col3:string,_col4:int,"
                                        "_col5:string,_col6:int,_col7:int,"
                                        "_col8:int>"),
                                       "0.12",
                                       1920800,
                                       45592,
                                       1,
                                       CompressionKind_ZLIB,
                                       262144,
                                       10000,
                                       std::map<std::string, std::string>()),
                    OrcFileDescription("nulls-at-end-snappy.orc",
                                       "nulls-at-end-snappy.jsn.gz",
                                       ("struct<_col0:tinyint,_col1:smallint,"
                                        "_col2:int,_col3:bigint,_col4:float,"
                                        "_col5:double,_col6:boolean>"),
                                       "0.12",
                                       70000,
                                       366347,
                                       1,
                                       CompressionKind_SNAPPY,
                                       262144,
                                       10000,
                                       std::map<std::string, std::string>()),
                    OrcFileDescription("orc-file-11-format.orc",
                                       "orc-file-11-format.jsn.gz",
                                       ("struct<boolean1:boolean,"
                                        "byte1:tinyint,short1:smallint,"
                                        "int1:int,long1:bigint,float1:float,"
                                        "double1:double,bytes1:binary,"
                                        "string1:string,middle:struct<list:"
                                        "array<struct<int1:int,"
                                        "string1:string>>>,list:array<struct"
                                        "<int1:int,string1:string>>,map:map"
                                        "<string,struct<int1:int,string1:"
                                        "string>>,ts:timestamp,"
                                        "decimal1:decimal(0,0)>"),
                                       "0.11",
                                       7500,
                                       372542,
                                       2,
                                       CompressionKind_NONE,
                                       262144,
                                       10000,
                                       std::map<std::string, std::string>()),
                    OrcFileDescription("orc_split_elim_new.orc",
                                       "orc_split_elim_new.jsn.gz",
                                       ("struct<userid:bigint,string1:string,"
                                        "subtype:double,"
					"decimal1:decimal(16,6),"
                                        "ts:timestamp>"),
                                       "0.12",
                                       25000,
                                       1981,
                                       1,
                                       CompressionKind_ZLIB,
                                       262144,
                                       10000,
                                       std::map<std::string, std::string>()),
                    OrcFileDescription("orc_index_int_string.orc",
                                       "orc_index_int_string.jsn.gz",
                                       ("struct<_col0:int,_col1:varchar(4)>"),
                                       "0.12",
                                       6000,
                                       11280,
                                       1,
                                       CompressionKind_ZLIB,
                                       262144,
                                       2000,
                                       std::map<std::string, std::string>()),
                    OrcFileDescription("over1k_bloom.orc",
                                       "over1k_bloom.jsn.gz",
                                       "struct<_col0:tinyint,_col1:smallint,"
                                       "_col2:int,_col3:bigint,_col4:float,"
                                       "_col5:double,_col6:boolean,"
                                       "_col7:string,_col8:timestamp,"
                                       "_col9:decimal(4,2),_col10:binary>",
                                       "0.12",
                                       2098,
                                       41780,
                                       2,
                                       CompressionKind_ZLIB,
                                       262144,
                                       10000,
                                       std::map<std::string, std::string>()),
                    OrcFileDescription("TestVectorOrcFile.testLz4.orc",
                                       "TestVectorOrcFile.testLz4.jsn.gz",
                                       "struct<x:bigint,y:int,z:bigint>",
                                       "0.12",
                                       10000,
                                       120952,
                                       2,
                                       CompressionKind_LZ4,
                                       1000,
                                       10000,
                                       std::map<std::string, std::string>()),
                    OrcFileDescription("TestVectorOrcFile.testLzo.orc",
                                       "TestVectorOrcFile.testLzo.jsn.gz",
                                       "struct<x:bigint,y:int,z:bigint>",
                                       "0.12",
                                       10000,
                                       120955,
                                       2,
                                       CompressionKind_LZO,
                                       1000,
                                       10000,
                                       std::map<std::string, std::string>())
                    ));

#ifdef HAS_PRE_1970
INSTANTIATE_TEST_CASE_P(TestMatch1900, FileParam,
    testing::Values(
                    OrcFileDescription("TestOrcFile.testDate1900.orc",
                                       "TestOrcFile.testDate1900.jsn.gz",
                                       "struct<time:timestamp,date:date>",
                                       "0.12",
                                       70000,
                                       30478,
                                       8,
                                       CompressionKind_ZLIB,
                                       10000,
                                       10000,
                                       std::map<std::string, std::string>())
		    ));
#endif

#ifdef HAS_POST_2038
  INSTANTIATE_TEST_CASE_P(TestMatch2038, FileParam,
    testing::Values(
                    OrcFileDescription("TestOrcFile.testDate2038.orc",
                                       "TestOrcFile.testDate2038.jsn.gz",
                                       "struct<time:timestamp,date:date>",
                                       "0.12",
                                       212000,
                                       94762,
                                       28,
                                       CompressionKind_ZLIB,
                                       10000,
                                       10000,
                                       std::map<std::string, std::string>())
		    ));
#endif

  TEST(TestMatch, columnSelectionTest) {
    ReaderOptions readerOpts;
    RowReaderOptions rowReaderOpts;
    std::list<uint64_t> includes;
    for(uint64_t i=0; i < 9; i += 2) {
      includes.push_back(i);
    }
    rowReaderOpts.include(includes);
    std::string filename = findExample("demo-11-none.orc");
    std::unique_ptr<Reader> reader =
      createReader(readLocalFile(filename), readerOpts);
    std::unique_ptr<RowReader> rowReader = reader->createRowReader(rowReaderOpts);

    EXPECT_EQ(CompressionKind_NONE, reader->getCompression());
    EXPECT_EQ(256 * 1024, reader->getCompressionSize());
    EXPECT_EQ(385, reader->getNumberOfStripes());
    EXPECT_EQ(1920800, reader->getNumberOfRows());
    EXPECT_EQ(10000, reader->getRowIndexStride());
    EXPECT_EQ(5069718, reader->getContentLength());
    EXPECT_EQ(filename, reader->getStreamName());
    EXPECT_THAT(reader->getMetadataKeys(), testing::IsEmpty());
    EXPECT_FALSE(reader->hasMetadataValue("foo"));
    EXPECT_EQ(18446744073709551615UL, rowReader->getRowNumber());

    const Type& rootType = reader->getType();
    EXPECT_EQ(0, rootType.getColumnId());
    EXPECT_EQ(STRUCT, rootType.getKind());
    ASSERT_EQ(9, rootType.getSubtypeCount());
    EXPECT_EQ("_col0", rootType.getFieldName(0));
    EXPECT_EQ("_col1", rootType.getFieldName(1));
    EXPECT_EQ("_col2", rootType.getFieldName(2));
    EXPECT_EQ("_col3", rootType.getFieldName(3));
    EXPECT_EQ("_col4", rootType.getFieldName(4));
    EXPECT_EQ("_col5", rootType.getFieldName(5));
    EXPECT_EQ("_col6", rootType.getFieldName(6));
    EXPECT_EQ("_col7", rootType.getFieldName(7));
    EXPECT_EQ("_col8", rootType.getFieldName(8));
    EXPECT_EQ(INT, rootType.getSubtype(0)->getKind());
    EXPECT_EQ(STRING, rootType.getSubtype(1)->getKind());
    EXPECT_EQ(STRING, rootType.getSubtype(2)->getKind());
    EXPECT_EQ(STRING, rootType.getSubtype(3)->getKind());
    EXPECT_EQ(INT, rootType.getSubtype(4)->getKind());
    EXPECT_EQ(STRING, rootType.getSubtype(5)->getKind());
    EXPECT_EQ(INT, rootType.getSubtype(6)->getKind());
    EXPECT_EQ(INT, rootType.getSubtype(7)->getKind());
    EXPECT_EQ(INT, rootType.getSubtype(8)->getKind());
    for(unsigned int i=0; i < 9; ++i) {
      EXPECT_EQ(i + 1, rootType.getSubtype(i)->getColumnId())
        << "fail on " << i;
    }

    const std::vector<bool> selected = rowReader->getSelectedColumns();
    EXPECT_EQ(true, selected[0]) << "fail on " << 0;
    for (size_t i = 1; i < 10; ++i) {
      EXPECT_EQ(i%2==1?true:false, selected[i]) << "fail on " << i;
    }

    unsigned long rowCount = 0;
    std::unique_ptr<ColumnVectorBatch> batch = rowReader->createRowBatch(1024);
    StructVectorBatch* structBatch =
      dynamic_cast<StructVectorBatch*>(batch.get());
    ASSERT_TRUE(structBatch != nullptr);
    LongVectorBatch* longVector = dynamic_cast<LongVectorBatch*>
      (structBatch->fields[0]);
    ASSERT_TRUE(longVector != nullptr);
    int64_t* idCol = longVector->data.data();
    while (rowReader->next(*batch)) {
      EXPECT_EQ(rowCount, rowReader->getRowNumber());
      for(unsigned int i=0; i < batch->numElements; ++i) {
        EXPECT_EQ(rowCount + i + 1, idCol[i]) << "Bad id for " << i;
      }
      rowCount += batch->numElements;
    }
    EXPECT_EQ(1920800, rowCount);
    EXPECT_EQ(1920800, rowReader->getRowNumber());
  }

  TEST(TestMatch, stripeInformationTest) {
    ReaderOptions opts;
    std::string filename = findExample("demo-11-none.orc");
    std::unique_ptr<Reader> reader = createReader(readLocalFile(filename), opts);

    EXPECT_EQ(385, reader->getNumberOfStripes());

    std::unique_ptr<StripeInformation> stripeInfo = reader->getStripe(7);
    EXPECT_EQ(92143, stripeInfo->getOffset());
    EXPECT_EQ(13176, stripeInfo->getLength());
    EXPECT_EQ(234, stripeInfo->getIndexLength());
    EXPECT_EQ(12673, stripeInfo->getDataLength());
    EXPECT_EQ(269, stripeInfo->getFooterLength());
    EXPECT_EQ(5000, stripeInfo->getNumberOfRows());
  }

  TEST(TestMatch, readRangeTest) {
    ReaderOptions opts;
    RowReaderOptions fullOpts, lastOpts, oobOpts, offsetOpts;
    // stripes[N-1]
    lastOpts.range(5067085, 1);
    // stripes[N]
    oobOpts.range(5067086, 4096);
    // stripes[7, 16]
    offsetOpts.range(80000, 130722);
    std::string filename = findExample("demo-11-none.orc");
    std::unique_ptr<Reader> reader = createReader(readLocalFile(filename), opts);
    std::unique_ptr<RowReader> fullReader = reader->createRowReader(fullOpts);
    std::unique_ptr<RowReader> lastReader = reader->createRowReader(lastOpts);
    std::unique_ptr<RowReader> oobReader = reader->createRowReader(oobOpts);
    std::unique_ptr<RowReader> offsetReader = reader->createRowReader(offsetOpts);

    std::unique_ptr<ColumnVectorBatch> oobBatch =
      oobReader->createRowBatch(5000);
    EXPECT_FALSE(oobReader->next(*oobBatch));

    // advance fullReader to align with offsetReader
    std::unique_ptr<ColumnVectorBatch> fullBatch =
      fullReader->createRowBatch(5000);
    for (int i=0; i < 7; ++i) {
      EXPECT_TRUE(fullReader->next(*fullBatch));
      EXPECT_EQ(5000, fullBatch->numElements);
    }

    StructVectorBatch *fullStructBatch =
      dynamic_cast<StructVectorBatch*>(fullBatch.get());
    ASSERT_TRUE(fullStructBatch != nullptr);
    LongVectorBatch* fullLongVector =
      dynamic_cast<LongVectorBatch*>(fullStructBatch->fields[0]);
    ASSERT_TRUE(fullLongVector != nullptr);
    int64_t* fullId = fullLongVector->data.data();

    std::unique_ptr<ColumnVectorBatch> offsetBatch =
      offsetReader->createRowBatch(5000);
    StructVectorBatch* offsetStructBatch =
      dynamic_cast<StructVectorBatch*>(offsetBatch.get());
    ASSERT_TRUE(offsetStructBatch != nullptr);
    LongVectorBatch* offsetLongVector =
      dynamic_cast<LongVectorBatch*>(offsetStructBatch->fields[0]);
    ASSERT_TRUE(offsetLongVector != nullptr);
    int64_t* offsetId = offsetLongVector->data.data();

    for (int i=7; i < 17; ++i) {
      EXPECT_TRUE(fullReader->next(*fullBatch));
      EXPECT_TRUE(offsetReader->next(*offsetBatch));
      EXPECT_EQ(fullBatch->numElements, offsetBatch->numElements);
      for (unsigned j=0; j < fullBatch->numElements; ++j) {
        EXPECT_EQ(fullId[j], offsetId[j]);
      }
    }
    EXPECT_FALSE(offsetReader->next(*offsetBatch));

    // advance fullReader to align with lastReader
    for (int i=17; i < 384; ++i) {
      EXPECT_TRUE(fullReader->next(*fullBatch));
      EXPECT_EQ(5000, fullBatch->numElements);
    }

    std::unique_ptr<ColumnVectorBatch> lastBatch =
      lastReader->createRowBatch(5000);
    StructVectorBatch* lastStructBatch =
      dynamic_cast<StructVectorBatch*>(lastBatch.get());
    ASSERT_TRUE(lastStructBatch != nullptr);
    LongVectorBatch* lastLongVector =
      dynamic_cast<LongVectorBatch*>(lastStructBatch->fields[0]);
    ASSERT_TRUE(lastLongVector != nullptr);
    int64_t* lastId = lastLongVector->data.data();

    EXPECT_TRUE(fullReader->next(*fullBatch));
    EXPECT_TRUE(lastReader->next(*lastBatch));
    EXPECT_EQ(fullBatch->numElements, lastBatch->numElements);
    for (unsigned i=0; i < fullBatch->numElements; ++i) {
      EXPECT_EQ(fullId[i], lastId[i]);
    }
    EXPECT_FALSE(fullReader->next(*fullBatch));
    EXPECT_FALSE(lastReader->next(*lastBatch));
  }

TEST(TestMatch, columnStatistics) {
  orc::ReaderOptions opts;
  std::string filename = findExample("demo-11-none.orc");
  std::unique_ptr<orc::Reader> reader =
    orc::createReader(orc::readLocalFile(filename), opts);

  // corrupt stats test
  EXPECT_EQ(true, reader->hasCorrectStatistics());

  // test column statistics
  std::unique_ptr<orc::Statistics> stats = reader->getStatistics();
  EXPECT_EQ(10, stats->getNumberOfColumns());

  // 6th real column, start from 1
  std::unique_ptr<orc::ColumnStatistics> col_6 =
    reader->getColumnStatistics(6);
  const orc::StringColumnStatistics* strStats =
    dynamic_cast<const orc::StringColumnStatistics*> (col_6.get());
  ASSERT_TRUE(strStats != nullptr);

  EXPECT_EQ("Good", strStats->getMinimum());
  EXPECT_EQ("Unknown", strStats->getMaximum());

  // 7th real column
  std::unique_ptr<orc::ColumnStatistics> col_7 =
    reader->getColumnStatistics(7);
  const orc::IntegerColumnStatistics* intStats =
    dynamic_cast<const orc::IntegerColumnStatistics*> (col_7.get());
  ASSERT_TRUE(intStats != nullptr);
  EXPECT_EQ(0, intStats->getMinimum());
  EXPECT_EQ(6, intStats->getMaximum());
  EXPECT_EQ(5762400, intStats->getSum());
}

TEST(TestMatch, stripeStatistics) {
  orc::ReaderOptions opts;
  std::string filename = findExample("demo-11-none.orc");
  std::unique_ptr<orc::Reader> reader =
    orc::createReader(orc::readLocalFile(filename), opts);

  // test stripe statistics
  EXPECT_EQ(385, reader->getNumberOfStripeStatistics());

  // stripe[384]: 385th stripe, last stripe
  unsigned long stripeIdx = 384;
  std::unique_ptr<orc::Statistics> stripeStats =
    reader->getStripeStatistics(stripeIdx);
  EXPECT_EQ(10, stripeStats->getNumberOfColumns());

  // 6th real column
  const orc::StringColumnStatistics* col_6 =
    dynamic_cast<const orc::StringColumnStatistics*>
    (stripeStats->getColumnStatistics(6));
  ASSERT_TRUE(col_6 != nullptr);
  EXPECT_EQ("Unknown", col_6->getMinimum());
  EXPECT_EQ("Unknown", col_6->getMaximum());

  // 7th real column
  const orc::IntegerColumnStatistics* col_7 =
    dynamic_cast<const orc::IntegerColumnStatistics*>
    (stripeStats->getColumnStatistics(7));
  ASSERT_TRUE(col_7 != nullptr);
  EXPECT_EQ(6, col_7->getMinimum());
  EXPECT_EQ(6, col_7->getMaximum());
  EXPECT_EQ(4800, col_7->getSum());
}

TEST(TestMatch, corruptStatistics) {
  orc::ReaderOptions opts;
  // read the file has corrupt statistics
  std::string filename = findExample("orc_split_elim.orc");
  std::unique_ptr<orc::Reader> reader =
    orc::createReader(orc::readLocalFile(filename), opts);

  EXPECT_EQ(true, !reader->hasCorrectStatistics());

  // 2nd real column, string
  std::unique_ptr<orc::ColumnStatistics> col_2 =
    reader->getColumnStatistics(2);
  const orc::StringColumnStatistics& strStats =
    dynamic_cast<const orc::StringColumnStatistics&> (*(col_2.get()));
  EXPECT_EQ(true, !strStats.hasMinimum());
  EXPECT_EQ(true, !strStats.hasMaximum());

  // stripe statistics
  unsigned long stripeIdx = 1;
  std::unique_ptr<orc::Statistics> stripeStats =
    reader->getStripeStatistics(stripeIdx);

  // 4th real column, Decimal
  const orc::DecimalColumnStatistics* col_4 =
    dynamic_cast<const orc::DecimalColumnStatistics*>
    (stripeStats->getColumnStatistics(4));
  ASSERT_TRUE(col_4 != nullptr);
  EXPECT_EQ(true, !col_4->hasMinimum());
  EXPECT_EQ(true, !col_4->hasMaximum());
}

TEST(TestMatch, noStripeStatistics) {
  orc::ReaderOptions opts;
  // read the file has no stripe statistics
  std::string filename = findExample("orc-file-11-format.orc");
  std::unique_ptr<orc::Reader> reader =
    orc::createReader(orc::readLocalFile(filename), opts);

  EXPECT_EQ(0, reader->getNumberOfStripeStatistics());
}

TEST(TestMatch, seekToRow) {
  /* Test with a regular file */
  {
    orc::ReaderOptions readerOpts;
    std::string filename = findExample("demo-11-none.orc");
    std::unique_ptr<orc::Reader> reader =
        orc::createReader(orc::readLocalFile(filename), readerOpts);
    std::unique_ptr<orc::RowReader> rowReader = reader->createRowReader();
    EXPECT_EQ(1920800, reader->getNumberOfRows());

    std::unique_ptr<orc::ColumnVectorBatch> batch =
        rowReader->createRowBatch(5000); // Stripe size
    rowReader->next(*batch);
    EXPECT_EQ(5000, batch->numElements);
    EXPECT_EQ(0, rowReader->getRowNumber());

    // We only load data till the end of the current stripe
    rowReader->seekToRow(11000);
    rowReader->next(*batch);
    EXPECT_EQ(4000, batch->numElements);
    EXPECT_EQ(11000, rowReader->getRowNumber());

    // We only load data till the end of the current stripe
    rowReader->seekToRow(99999);
    rowReader->next(*batch);
    EXPECT_EQ(1, batch->numElements);
    EXPECT_EQ(99999, rowReader->getRowNumber());

    // Skip more rows than available
    rowReader->seekToRow(1920800);
    rowReader->next(*batch);
    EXPECT_EQ(0, batch->numElements);
    EXPECT_EQ(1920800, rowReader->getRowNumber());
  }

  /* Test with a portion of the file */
  {
    orc::ReaderOptions readerOpts;
    orc::RowReaderOptions rowReaderOpts;
    std::string filename = findExample("demo-11-none.orc");
    rowReaderOpts.range(13126, 13145);   // Read only the second stripe (rows 5000..9999)

    std::unique_ptr<orc::Reader> reader =
        orc::createReader(orc::readLocalFile(filename), readerOpts);
    std::unique_ptr<orc::RowReader> rowReader = reader->createRowReader(rowReaderOpts);
    EXPECT_EQ(1920800, reader->getNumberOfRows());

    std::unique_ptr<orc::ColumnVectorBatch> batch =
        rowReader->createRowBatch(5000); // Stripe size
    rowReader->next(*batch);
    EXPECT_EQ(5000, batch->numElements);

    rowReader->seekToRow(7000);
    rowReader->next(*batch);
    EXPECT_EQ(3000, batch->numElements);
    EXPECT_EQ(7000, rowReader->getRowNumber());

    rowReader->seekToRow(1000);
    rowReader->next(*batch);
    EXPECT_EQ(0, batch->numElements);
    EXPECT_EQ(10000, rowReader->getRowNumber());

    rowReader->seekToRow(11000);
    rowReader->next(*batch);
    EXPECT_EQ(0, batch->numElements);
    EXPECT_EQ(10000, rowReader->getRowNumber());
  }

  /* Test with an empty file */
  {
    orc::ReaderOptions readerOpts;
    std::string filename = findExample("TestOrcFile.emptyFile.orc");
    std::unique_ptr<orc::Reader> reader =
        orc::createReader(orc::readLocalFile(filename), readerOpts);
    std::unique_ptr<orc::RowReader> rowReader = reader->createRowReader();
    EXPECT_EQ(0, reader->getNumberOfRows());

    std::unique_ptr<orc::ColumnVectorBatch> batch =
        rowReader->createRowBatch(5000);
    rowReader->next(*batch);
    EXPECT_EQ(0, batch->numElements);

    rowReader->seekToRow(0);
    rowReader->next(*batch);
    EXPECT_EQ(0, batch->numElements);
    EXPECT_EQ(0, rowReader->getRowNumber());

    rowReader->seekToRow(1);
    rowReader->next(*batch);
    EXPECT_EQ(0, batch->numElements);
    EXPECT_EQ(0, rowReader->getRowNumber());
  }
}

TEST(TestMatch, futureFormatVersion) {
  std::string filename = findExample("version1999.orc");
  orc::ReaderOptions opts;
  std::ostringstream errorMsg;
  opts.setErrorStream(errorMsg);
  std::unique_ptr<orc::Reader> reader =
    orc::createReader(orc::readLocalFile(filename), opts);
  EXPECT_EQ(("Warning: ORC file " + filename +
             " was written in an unknown format version 19.99\n"),
            errorMsg.str());
  EXPECT_EQ("19.99", reader->getFormatVersion().toString());
}

TEST(TestMatch, selectColumns) {
    orc::ReaderOptions readerOpts;
    orc::RowReaderOptions rowReaderOpts;
    std::string filename = findExample("TestOrcFile.testSeek.orc");

    // All columns
    std::unique_ptr<orc::Reader> reader =
        orc::createReader(orc::readLocalFile(filename), readerOpts);
    std::unique_ptr<orc::RowReader> rowReader = reader->createRowReader(rowReaderOpts);
    std::vector<bool> c = rowReader->getSelectedColumns();
    EXPECT_EQ(24, c.size());
    for (unsigned int i=0; i < c.size(); i++) {
      EXPECT_TRUE(c[i]);
    }
    std::unique_ptr<orc::ColumnVectorBatch> batch = rowReader->createRowBatch(1);
    std::string line;
    std::unique_ptr<orc::ColumnPrinter> printer =
        createColumnPrinter(line, &rowReader->getSelectedType());
    rowReader->next(*batch);
    printer->reset(*batch);
    printer->printRow(0);
    std::ostringstream expected;
    expected << "{\"boolean1\": true, \"byte1\": -76, "
        << "\"short1\": 21684, \"int1\": -941468492, "
        << "\"long1\": -6863419716327549772, \"float1\": 0.7762409, "
        << "\"double1\": 0.77624090391187, \"bytes1\": [123, 108, 207, 27, 93, "
        << "157, 139, 233, 181, 90, 14, 60, 34, 120, 26, 119, 231, 50, 155, 121], "
        << "\"string1\": \"887336a7\", \"middle\": {\"list\": [{\"int1\": "
        << "-941468492, \"string1\": \"887336a7\"}, {\"int1\": -1598014431, "
        << "\"string1\": \"ba419d35-x\"}]}, \"list\": [], \"map\": [{\"key\": "
        << "\"ba419d35-x\", \"value\": {\"int1\": -1598014431, \"string1\": "
        << "\"ba419d35-x\"}}, {\"key\": \"887336a7\", \"value\": {\"int1\": "
        << "-941468492, \"string1\": \"887336a7\"}}]}";
    EXPECT_EQ(expected.str(), line);

    // Int column #2
    std::list<uint64_t> cols;
    cols.push_back(1);
    rowReaderOpts.include(cols);
    rowReader = reader->createRowReader(rowReaderOpts);
    c = rowReader->getSelectedColumns();
    for (unsigned int i=1; i < c.size(); i++) {
      if (i==2)
        EXPECT_TRUE(c[i]);
      else
        EXPECT_TRUE(!c[i]);
    }
    batch = rowReader->createRowBatch(1);
    line.clear();
    printer = createColumnPrinter(line, &rowReader->getSelectedType());
    rowReader->next(*batch);
    printer->reset(*batch);
    printer->printRow(0);
    std::string expectedInt("{\"byte1\": -76}");
    EXPECT_EQ(expectedInt, line);


    // Struct column #10
    cols.clear();
    cols.push_back(9);
    rowReaderOpts.include(cols);
    rowReader = reader->createRowReader(rowReaderOpts);
    c = rowReader->getSelectedColumns();
    for (unsigned int i=1; i < c.size(); i++) {
      if (i>=10 && i<=14)
        EXPECT_TRUE(c[i]);
      else
        EXPECT_TRUE(!c[i]);
    }
    batch = rowReader->createRowBatch(1);
    line.clear();
    printer = createColumnPrinter(line, &rowReader->getSelectedType());
    rowReader->next(*batch);
    printer->reset(*batch);
    printer->printRow(0);
    std::ostringstream expectedStruct;
    expectedStruct << "{\"middle\": {\"list\": "
        << "[{\"int1\": -941468492, \"string1\": \"887336a7\"}, "
        << "{\"int1\": -1598014431, \"string1\": \"ba419d35-x\"}]}}";
    EXPECT_EQ(expectedStruct.str(), line);

    // Array column #11
    cols.clear();
    cols.push_back(10);
    rowReaderOpts.include(cols);
    rowReader = reader->createRowReader(rowReaderOpts);
    c = rowReader->getSelectedColumns();
    for (unsigned int i=1; i < c.size(); i++) {
      if (i>=15 && i<=18)
        EXPECT_TRUE(c[i]);
      else
        EXPECT_TRUE(!c[i]);
    }
    batch = rowReader->createRowBatch(1);
    line.clear();
    printer = createColumnPrinter(line, &rowReader->getSelectedType());
    rowReader->next(*batch);
    printer->reset(*batch);
    printer->printRow(0);
    std::string expectedArray("{\"list\": []}");
    EXPECT_EQ(expectedArray, line);

    // Map column #12
    cols.clear();
    cols.push_back(11);
    rowReaderOpts.include(cols);
    rowReader = reader->createRowReader(rowReaderOpts);
    c = rowReader->getSelectedColumns();
    for (unsigned int i=1; i < c.size(); i++) {
      if (i>=19 && i<=23)
        EXPECT_TRUE(c[i]);
      else
        EXPECT_TRUE(!c[i]);
    }
    batch = rowReader->createRowBatch(1);
    line.clear();
    printer = createColumnPrinter(line, &rowReader->getSelectedType());
    rowReader->next(*batch);
    printer->reset(*batch);
    printer->printRow(0);
    std::ostringstream expectedMap;
    expectedMap << "{\"map\": [{\"key\": \"ba419d35-x\", \"value\": {\"int1\":"
        << " -1598014431, \"string1\": \"ba419d35-x\"}}, {\"key\": "
        << "\"887336a7\", \"value\": {\"int1\": -941468492, \"string1\": "
        << "\"887336a7\"}}]}";
    EXPECT_EQ(expectedMap.str(), line);

    // Map column #12
    // two subtypes with column id:
    // map<string(20),struct(21)<int1(22):int,string1(23):string>
    cols.clear();
    cols.push_back(20);
    cols.push_back(22);
    cols.push_back(23);
    rowReaderOpts.includeTypes(cols);
    rowReader = reader->createRowReader(rowReaderOpts);
    c = rowReader->getSelectedColumns();
    for (unsigned int i=1; i < c.size(); i++) {
      if (i>=19 && i<=23)
        EXPECT_TRUE(c[i]);
      else
        EXPECT_TRUE(!c[i]);
    }
    batch = rowReader->createRowBatch(1);
    line.clear();
    printer = createColumnPrinter(line, &rowReader->getSelectedType());
    rowReader->next(*batch);
    printer->reset(*batch);
    printer->printRow(0);
    std::ostringstream expectedMapWithColumnId;
    expectedMapWithColumnId << "{\"map\": [{\"key\": \"ba419d35-x\", \"value\": {\"int1\":"
        << " -1598014431, \"string1\": \"ba419d35-x\"}}, {\"key\": "
        << "\"887336a7\", \"value\": {\"int1\": -941468492, \"string1\": "
        << "\"887336a7\"}}]}";
    EXPECT_EQ(expectedMapWithColumnId.str(), line);

    // Struct column #10, with field name: middle
    std::list<std::string> colNames;
    colNames.push_back("middle.list.int1");
    colNames.push_back("middle.list.string1");
    rowReaderOpts.include(colNames);
    rowReader = reader->createRowReader(rowReaderOpts);
    c = rowReader->getSelectedColumns();
    for (unsigned int i=1; i < c.size(); i++) {
      if (i>=10 && i<=14)
        EXPECT_TRUE(c[i]);
      else
        EXPECT_TRUE(!c[i]);
    }
    batch = rowReader->createRowBatch(1);
    line.clear();
    printer = createColumnPrinter(line, &rowReader->getSelectedType());
    rowReader->next(*batch);
    printer->reset(*batch);
    printer->printRow(0);
    std::ostringstream expectedStructWithColumnName;
    expectedStructWithColumnName << "{\"middle\": {\"list\": "
        << "[{\"int1\": -941468492, \"string1\": \"887336a7\"}, "
        << "{\"int1\": -1598014431, \"string1\": \"ba419d35-x\"}]}}";
    EXPECT_EQ(expectedStructWithColumnName.str(), line);
}

TEST(Reader, memoryUse) {
  std::string filename = findExample("TestOrcFile.testSeek.orc");
  std::unique_ptr<orc::Reader> reader;
  std::unique_ptr<orc::RowReader> rowReader;
  std::unique_ptr<orc::ColumnVectorBatch> batch;
  orc::ReaderOptions readerOpts;
  orc::RowReaderOptions rowReaderOpts;
  std::list<uint64_t> cols;

  // Int column
  cols.push_back(1);
  rowReaderOpts.include(cols);
  reader = orc::createReader(orc::readLocalFile(filename), readerOpts);
  rowReader = reader->createRowReader(rowReaderOpts);
  EXPECT_EQ(483517, reader->getMemoryUseByFieldId(cols));
  batch = rowReader->createRowBatch(1);
  EXPECT_EQ(10, batch->getMemoryUsage());
  batch = rowReader->createRowBatch(1000);
  EXPECT_EQ(10000, batch->getMemoryUsage());
  EXPECT_FALSE(batch->hasVariableLength());

  // Binary column
  cols.clear();
  cols.push_back(7);
  rowReaderOpts.include(cols);
  reader = orc::createReader(orc::readLocalFile(filename), readerOpts);
  rowReader = reader->createRowReader(rowReaderOpts);
  EXPECT_EQ(835906, reader->getMemoryUseByFieldId(cols));
  batch = rowReader->createRowBatch(1);
  EXPECT_EQ(18, batch->getMemoryUsage());
  EXPECT_FALSE(batch->hasVariableLength());

  // String column
  cols.clear();
  cols.push_back(8);
  rowReaderOpts.include(cols);
  reader = orc::createReader(orc::readLocalFile(filename), readerOpts);
  rowReader = reader->createRowReader(rowReaderOpts);
  EXPECT_EQ(901442, reader->getMemoryUseByFieldId(cols));
  batch = rowReader->createRowBatch(1);
  EXPECT_EQ(18, batch->getMemoryUsage());
  EXPECT_FALSE(batch->hasVariableLength());

  // Struct column (with a List subcolumn)
  cols.clear();
  cols.push_back(9);
  rowReaderOpts.include(cols);
  reader = orc::createReader(orc::readLocalFile(filename), readerOpts);
  rowReader = reader->createRowReader(rowReaderOpts);
  EXPECT_EQ(1294658, reader->getMemoryUseByFieldId(cols));
  batch = rowReader->createRowBatch(1);
  EXPECT_EQ(46, batch->getMemoryUsage());
  EXPECT_TRUE(batch->hasVariableLength());

  // List column
  cols.clear();
  cols.push_back(10);
  rowReaderOpts.include(cols);
  reader = orc::createReader(orc::readLocalFile(filename), readerOpts);
  rowReader = reader->createRowReader(rowReaderOpts);
  EXPECT_EQ(1229122, reader->getMemoryUseByFieldId(cols));
  batch = rowReader->createRowBatch(1);
  EXPECT_EQ(45, batch->getMemoryUsage());
  EXPECT_TRUE(batch->hasVariableLength());

  // Map column
  cols.clear();
  cols.push_back(11);
  rowReaderOpts.include(cols);
  reader = orc::createReader(orc::readLocalFile(filename), readerOpts);
  rowReader = reader->createRowReader(rowReaderOpts);
  EXPECT_EQ(1491266, reader->getMemoryUseByFieldId(cols));
  batch = rowReader->createRowBatch(1);
  EXPECT_EQ(62, batch->getMemoryUsage());
  EXPECT_TRUE(batch->hasVariableLength());

  // All columns
  cols.clear();
  for(uint64_t c=0; c < 12; ++c) {
    cols.push_back(c);
  }
  rowReaderOpts.include(cols);
  reader = orc::createReader(orc::readLocalFile(filename), readerOpts);
  rowReader = reader->createRowReader(rowReaderOpts);
  EXPECT_EQ(4112706, reader->getMemoryUseByFieldId(cols));
  batch = rowReader->createRowBatch(1);
  EXPECT_EQ(248, batch->getMemoryUsage());
  EXPECT_TRUE(batch->hasVariableLength());
}

  std::map<std::string, std::string> makeMetadata() {
    std::map<std::string, std::string> result;
    result["my.meta"] = "\x01\x02\x03\x04\x05\x06\x07\xff\xfe\x7f\x80";
    result["clobber"] = "\x05\x07\x0b\x0d\x11\x13";
    const unsigned char buffer[] = {
96,180,32,187,56,81,217,212,122,203,147,61,190,112,57,155,246,201,45,163,
58,240,29,79,183,112,233,140,3,37,244,29,62,186,248,152,109,167,18,200,
43,205,77,85,75,240,181,64,35,194,155,98,77,233,239,156,47,147,30,252,
88,15,154,251,8,27,18,225,7,177,232,5,242,180,245,240,241,208,12,45,
15,98,99,70,112,146,28,80,88,103,255,32,246,168,51,94,152,175,135,37,
56,85,134,180,31,239,242,5,180,224,90,0,8,35,247,139,95,143,92,2,
67,156,232,246,122,120,29,144,203,230,191,26,231,242,188,64,164,151,9,160,
108,14,49,73,155,240,41,105,202,66,210,3,229,102,188,198,150,222,8,250,
1,2,160,253,46,35,48,176,150,74,187,124,68,48,32,222,28,173,9,191,
214,56,31,251,148,218,175,187,144,196,237,145,160,97,58,209,220,75,71,3,
175,132,193,214,59,26,135,105,33,198,213,134,157,97,204,185,142,209,58,230,
192,154,19,252,145,225,73,34,243,1,207,139,207,147,67,21,166,4,157,47,
7,217,131,250,169,27,143,78,114,101,236,184,21,167,203,171,193,69,12,183,
43,60,116,16,119,23,170,36,172,66,242,91,108,103,132,118,125,14,53,70,
196,247,37,1,145,163,182,170,162,182,77,18,110,85,131,176,76,17,50,89,
201,72,225,208,179,155,185,86,12,213,64,155,110,202,254,219,200,172,175,238,
167,77,183,248,90,223,148,190,154,133,161,221,75,3,170,136,131,29,210,156,
64,120,129,11,58,40,210,45,102,128,182,79,203,177,178,55,194,68,18,52,
206,171,191,218,216,124,49,21,72,246,121,2,116,185,46,106,89,29,58,177,
166,11,115,64,11,196,116,197,45,60,188,242,251,174,114,182,230,212,159,176,
177,133,19,54,250,44,84,12,223,191,120,200,219,73,44,101,231,91,1,242,
86,10,157,196,86,254,164,3,66,134,86,158,48,134,234,100,151,36,149,156,
68,8,146,218,235,114,76,6,229,19,58,201,170,148,16,238,186,45,84,254,
138,253,248,80,125,33,19,226,2,106,147,122,228,57,152,43,206,121,204,36,
14,38,74,246,205,67,204,48,37,102,107,185,179,127,129,231,20,21,103,173,
104,201,130,73,128,219,236,205,20,219,32,168,112,88,1,113,21,182,16,82,
57,102,75,118,131,96,156,24,178,230,82,218,235,107,179,120,187,63,120,128,
92,187,129,182,154,249,239,253,13,66,111,145,188,18,34,248,23,137,195,144,
219,40,101,90,30,2,29,96,158,157,25,12,222,85,168,201,35,237,85,18,
244,72,205,0,24,151,115,7,95,78,212,28,87,207,209,123,139,190,52,2,
21,185,209,248,226,186,91,123,35,200,54,253,59,89,143,89,220,21,119,196,
157,151,25,184,177,147,91,128,45,32,152,163,112,27,106,65,71,222,102,86,
183,253,36,79,11,33,22,190,57,233,40,217,234,84,4,186,183,105,85,13,
246,140,86,48,227,219,154,2,253,245,209,49,130,27,150,90,189,48,247,209,
133,115,52,22,177,69,12,237,253,3,174,217,74,188,227,213,6,248,240,0,
139,40,121,189,39,22,210,78,95,141,155,182,188,127,23,136,50,15,115,77,
90,104,55,235,130,241,252,79,85,60,247,70,138,139,90,240,208,165,207,223,
54,19,46,197,250,49,33,156,0,163,227,139,104,148,156,232,107,6,11,38,
177,188,99,11,39,114,53,250,170,178,143,165,54,168,3,82,2,136,46,127,
132,245,39,53,8,50,183,129,196,69,203,125,221,220,75,133,165,11,85,51,
102,209,201,93,140,62,231,96,186,105,70,122,120,4,111,141,220,91,55,180,
196,21,73,55,1,233,160,82,217,81,160,70,186,207,251,2,21,167,243,244,
173,73,119,179,108,45,221,194,204,113,207,190,145,114,114,189,43,62,119,155,
172,71,73,123,222,80,46,60,228,51,229,145,135,85,152,99,68,212,96,24,
130,253,85,233,201,56,209,85,202,2,218,42,157,135,181,148,16,122,0,1,
192,42,13,152,157,54,208,67,183,89,5,15,237,166,143,228,253,63,51,193,
49,111,45,76,60,34,122,56,16,175,204,109,163,7,81,95,98,98,3,176,
210,97,62,97,194,56,147,104,49,69,75,174,26,166,97,90,176,204,132,43,
164,94,248,171,60,143,223,88,243,250,139,189,116,106,229,216,246,180,249,228,
94,165,148,214,32,29,120,148,50,95,204,0,21,223,192,130,110,177,133,10,
141,63,221,79,208,177,227,165,69,121,76,138,241,231,3,157,67,149,29,249,
144,163,34,5,177,90,23,157,207,59,205,105,17,141,244,6,237,108,194,224,
175,115,99,176,73,25,78,173,104,163,90,161,171,115,1,77,71,204,93,209,
42,92,79,248,134,238,185,189,41,78,155,81,245,102,165,161,60,245,208,105,
215,200,156,80,249,39,109,202,174,11,23,192,253,242,228,5,151,61,178,48,
178,91,35,105,32,63,92,31,146,225,101,237,187,27,154,182,4,86,70,58,
62,234,219,238,252,181,158,168,17,211,164,79,12,22,202,150,251,117,143,135,
137,184,169,5,166,127,209,45,232,222,164,137,84,95,39,29,140,34,175,77,
103,199,22,175,142,238,38,204,148,135,22,97,80,99,131,209,10,110,169,151,
217,77,22,13,211,196,203,240,73,64,176,65,46,195,189,136,228,13,47,11,
191,118,213,54,140,68,243,158,192,78,111,85,155,134,217,132,158,35,35,64,
128,51,239,49,161,95,76,188,142,106,237,81,147,97,85,23,213,114,117,58,
133,96,185,67,8,196,113,114,31,144,76,48,181,159,167,115,30,23,58,76,
96,47,183,19,234,37,43,194,58,195,128,33,120,49,237,11,142,230,42,181,
195,150,8,22,31,218,88,209,166,197,104,228,0,114,22,181,229,21,222,136,
185,163,236,240,158,167,236,21,174,18,105,188,124,184,6,136,39,236,158,185,
97,185,201,18,108,57,229,44,103,188,64,45,200,197,71,247,94,153,43,226,
126,159,221,223,62,247,181,89,237,101,57,238,24,83,100,252,113,212,82,2,
149,177,109,147,207,152,105,10,6,246,175,154,40,85,251,150,130,114,234,69,
195,0,42,61,185,54,96,131,52,128,205,92,92,127,218,241,171,148,200,158,
68,126,190,55,105,251,67,90,197,19,234,232,175,17,21,97,215,11,245,4,
173,94,10,192,235,149,50,70,45,84,95,166,173,12,54,171,19,56,73,242,
10,75,178,73,237,203,77,225,40,206,97,16,39,189,165,91,52,80,236,57,
153,127,42,236,57,110,219,35,139,189,122,217,84,219,136,154,107,83,56,173,
5,174,77,186,194,170,21,139,112,8,202,77,40,135,137,120,197,202,23,160,
75,201,27,31,45,183,41,9,76,159,235,57,237,128,52,122,241,222,232,63,
152,60,185,23,134,45,12,10,144,157,235,181,97,242,249,234,35,237,35,111,
102,44,61,28,2,194,192,209,253,239,139,149,236,194,193,154,84,226,118,213,
190,61,24,172,239,71,191,90,69,164,55,115,196,127,160,116,138,34,53,88,
127,217,14,187,112,14,247,68,167,236,7,143,216,246,193,190,169,191,249,242,
170,40,199,52,36,121,132,5,111,170,71,38,234,210,164,180,106,131,157,235,
135,101,71,54,74,177,12,176,90,244,49,71,234,7,173,234,121,117,24,120,
192,104,16,9,255,117,216,51,230,219,245,49,113,2,236,60,228,42,117,147,
95,52,171,205,163,61,9,247,106,65,163,38,46,180,237,84,86,53,174,234,
50,156,96,35,214,175,158,104,90,191,232,24,42,224,166,12,245,111,215,209,
210,219,213,190,144,251,127,171,220,34,47,75,98,151,203,109,154,251,166,62,
196,192,221,122,192,24,69,112,6,60,96,212,62,8,196,49,95,38,31,138,
79,6,22,154,205,131,155,149,149,79,202,223,30,96,238,152,60,190,92,33,
128,146,215,95,114,177,108,178,58,133,107,0,196,195,152,152,142,159,131,176,
21,252,231,249,201,37,184,182,74,190,228,38,14,36,186,17,228,27,252,246,
100,82,220,128,34,18,136,206,4,101,253,176,91,18,28,220,8,250,1,205,
172,178,200,244,226,221,187,184,63,232,49,140,65,194,109,87,165,129,63,171,
82,79,82,16,25,15,115,201,132,189,106,89,185,207,66,76,50,118,89,133,
226,229,148,205,220,163,208,244,91,210,31,73,224,174,105,177,250,84,120,93,
201,113,34,31,217,34,21,251,182,8,95,129,95,181,94,0,100,145,189,230,
170,154,141,156,216,141,204,42,26,119,41,53,199,241,111,89,10,33,60,152,
44,195,245,177,252,58,73,34,171,176,77,8,200,61,174,60,169,164,145,66,
138,83,24,22,81,58,5,119,94,133,244,213,213,161,10,104,53,225,167,56,
166,3,123,47,66,50,93,193,136,94,35,75,206,253,197,124,161,66,100,147,
123,127,46,98,245,59,32,43,56,171,118,79,240,72,42,95,118,152,19,231,
234,237,17,60,94,121,128,210,210,100,214,137,25,50,200,151,86,160,221,90,
103,23,73,227,70,108,96,79,24,33,188,70,12,113,99,214,40,68,77,138,
101,86,184,171,136,129,41,116,198,65,236,27,218,209,66,36,12,135,133,239,
177,67,173,116,107,38,20,224,12,177,170,11,189,176,28,218,39,50,27,94,
148,243,246,100,218,54,132,91,198,112,215,96,27,197,67,199,76,177,184,134,
95,18,50,161,163,9,7,1,238,86,243,75,23,246,219,8,103,165,180,191,
160,223,109,201,6,142,215,218,53,110,116,69,105,180,100,152,194,155,193,184,
229,15,113,192,39,19,100,107,179,161,148,48,231,24,114,74,119,209,4,38,
114,215,181,62,231,167,45,95,44,127,15,32,170,152,225,230,162,202,16,38,
165,199,193,164,142,49,108,86,68,131,131,150,145,249,106,214,137,92,226,178,
211,113,61,216,240,166,104,208,233,142,211,66,88,141,22,144,170,222,199,158,
153,30,7,60,230,247,159,125,117,11,204,227,17,48,83,106,250,24,134,117,
96,17,192,218,153,213,79,44,246,213,242,209,117,188,224,123,8,161,185,12,
194,241,131,199,33,93,231,66,36,244,50,168,241,158,11,215,108,82,226,88,
80,190,182,109,46,122,93,37,82,19,190,189,254,90,172,51,163,251,87,224,
91,179,47,148,137,140,235,74,135,183,41,186,58,176,176,251,233,47,27,4,
99,113,93,212,169,123,208,193,28,118,105,197,159,229,93,196,154,179,36,93,
213,188,91,219,90,70,8,40,35,119,205,58,158,166,172,69,184,27,117,44,
115,55,142,64,136,28,63,229,152,254,93,0,244,240,232,89,250,61,200,68,
43,1,45,198,171,59,196,61,19,17,164,204,118,211,88,30,190,42,243,165,
124,5,136,201,184,91,53,140,136,167,122,246,165,61,11,5,244,58,181,53,
22,138,124,158,83,191,218,235,128,178,79,42,68,186,235,11,166,240,210,168,
23,167,234,248,8,81,196,7,41,37,134,104,20,40,146,186,31,154,241,131,
30,4,235,121,113,37,178,2,121,209,167,46,221,196,45,37,33,91,137,182,
189,245,41,218,207,233,36,97,82,5,197,64,127,76,52,57,135,50,247,55,
161,96,170,49,179,205,86,36,142,13,61,147,102,55,163,207,2,230,123,139,
73,13,247,80,156,19,243,194,144,140,185,137,191,35,29,59,152,67,116,132,
68,146,220,248,160,40,197,139,215,213,236,118,195,33,73,94,3,11,200,105,
154,138,57,37,43,118,116,159,46,94,188,55,10,194,174,63,43,240,68,96,
113,111,90,196,101,158,183,233,85,44,137,66,52,44,153,145,110,11,80,135,
60,155,8,224,251,170,179,26,137,225,12,167,100,144,51,150,54,227,77,127,
200,39,147,89,245,37,207,106,200,65,50,108,42,223,2,171,8,103,14,216,
129,209,3,4,56,56,61,142,35,253,52,42,165,34,106,158,245,253,62,190,
171,68,223,116,136,37,166,237,116,66,99,235,159,122,186,99,233,82,177,171,
124,222,190,95,203,197,67,34,82,56,136,18,62,255,141,240,135,193,244,31,
86,50,100,78,177,241,176,135,106,83,124,209,117,39,112,238,42,156,84,127,
173,147,94,4,219,222,84,43,126,46,6,84,26,155,5,209,75,42,38,149,
29,158,163,43,166,126,74,92,73,193,250,95,170,85,125,10,145,101,124,249,
102,112,206,197,0,103,21,104,68,139,163,7,92,195,30,194,140,121,217,133,
194,223,31,38,116,167,7,99,162,140,161,162,95,4,65,171,156,108,46,230,
55,147,182,156,244,137,173,70,6,21,196,61,192,127,108,164,54,2,232,100,
6,247,209,72,41,97,177,254,84,37,66,80,3,141,138,74,165,201,116,146,
216,189,228,34,135,165,38,180,163,171,0,112,231,243,11,131,172,7,147,151,
230,179,50,44,76,84,84,23,163,21,108,87,43,233,41,225,236,191,213,51,
111,66,63,127,35,81,204,165,112,35,251,135,223,58,55,189,247,41,194,179,
24,55,230,64,11,61,193,151,217,230,5,164,211,90,229,239,205,253,147,31,
37,187,133,95,36,131,4,31,178,152,225,14,159,119,190,29,232,72,79,45,
203,105,196,40,13,43,152,105,172,124,143,98,29,113,128,166,109,242,243,149,
106,105,45,182,203,187,244,181,22,206,53,241,84,174,175,47,221,71,9,243,
187,38,202,15,205,211,124,158,197,209,162,55,210,167,181,184,158,109,194,156,
77,152,42,7,153,94,180,91,10,113,74,39,167,61,151,123,80,62,172,23,
12,228,195,68,227,182,147,240,18,55,114,167,41,230,160,192,212,231,209,160,
219,109,30,48,84,206,26,46,228,72,167,244,117,76,29,42,86,117,28,10,
148,140,132,176,171,97,199,53,211,72,128,171,159,249,216,161,89,99,28,182,
106,201,130,200,8,197,236,35,44,114,130,92,131,7,235,245,182,168,28,38,
119,48,145,200,37,192,159,149,127,135,141,255,234,99,84,213,33,37,44,236,
39,49,218,171,182,144,100,176,147,101,220,102,55,108,166,131,68,106,30,103,
69,24,110,98,13,171,136,147,239,55,112,177,78,127,178,56,243,90,68,121,
109,247,198,235,154,166,151,27,85,186,255,74,95,104,248,201,161,208,172,212,
246,226,91,209,109,215,178,21,121,173,45,179,214,170,5,197,192,117,97,189,
180,184,189,139,51,50,63,167,25,230,141,134,141,156,225,118,146,214,241,151,
119,126,142,113,64,130,45,67,218,185,119,47,66,240,154,154,91,90,167,221,
11,173,207,21,97,50,205,73,145,192,245,218,146,221,226,73,133,142,162,208,
174,75,149,56,230,186,214,74,37,130,231,122,176,247,92,113,240,223,79,210,
129,20,145,189,99,46,11,17,96,215,221,245,20,251,98,150,7,158,110,125,
22,106,119,215,103,153,83,186,15,181,136,16,61,49,13,113,247,50,63,198,
242,211,87,108,123,221,143,201,20,183,254,59,98,36,153,175,50,231,77,190,
101,76,67,13,229,9,85,176,77,230,103,212,62,115,25,26,100,236,52,86,
252,55,147,193,118,23,102,224,55,200,43,116,238,209,102,214,90,234,17,249,
219,38,234,97,172,180,53,78,230,243,157,88,182,243,124,56,111,208,137,183,
64,86,189,213,120,89,207,110,197,75,236,172,10,49,44,158,138,208,173,156,
41,209,209,119,187,250,122,4,160,165,148,47,60,14,241,154,41,133,139,182,
16,185,98,213,181,233,95,219,134,240,129,70,235,0,116,80,135,71,203,72,
16,41,16,6,188,144,103,141,247,123,184,53,107,195,232,96,174,248,91,202,
53,120,240,48,254,125,217,107,27,123,244,249,249,106,191,83,118,242,142,101,
46,48,118,1,201,6,64,20,58,179,141,93,144,221,37,13,200,239,106,184,
126,169,90,51,75,12,181,50,198,156,167,100,238,245,173,167,96,62,61,23,
144,214,77,175,114,17,223,119,193,40,174,65,55,54,241,184,38,33,41,9,
40,190,84,41,171,105,165,43,45,105,107,248,93,18,34,199,27,120,192,134,
248,244,144,151,213,192,155,133,100,227,56,67,191,74,154,142,171,166,151,162,
110,254,62,63,66,99,181,64,176,113,99,111,143,56,207,237,103,33,16,7,
13,53,250,160,209,140,106,191,139,205,206,236,38,50,203,40,85,61,145,166,
184,114,92,178,58,94,142,125,4,117,75,48,224,242,140,193,73,69,37,11,
187,218,247,92,156,73,43,247,156,134,225,201,160,172,187,122,197,21,136,28,
69,58,236,219,209,22,20,63,52,92,170,113,253,204,170,220,220,255,17,80,
149,97,205,127,56,70,202,176,139,98,94,78,198,125,3,16,133,170,192,130,
68,33,226,79,234,27,97,66,52,250,48,131,177,199,46,244,52,36,6,149,
255,249,242,77,169,22,47,149,216,137,88,115,80,28,221,15,109,126,84,26,
184,76,106,53,212,243,178,48,173,65,158,150,39,242,219,173,18,243,14,251,
87,245,226,67,210,109,237,65,70,1,0,25,192,14,254,217,215,156,173,142,
157,152,241,126,27,192,79,56,172,116,103,148,198,244,100,243,103,191,91,14,
136,109,61,203,101,255,37,151,6,0,41,137,102,154,210,249,139,134,34,168,
34,221,130,45,156,137,215,129,83,196,153,129,27,255,56,221,7,58,209,175,
163,187,252,203,76,56,145,248,55,180,174,173,167,202,163,63,130,177,193,121,
251,73,20,207,59,107,181,126,201,250,113,80,97,121,245,107,246,123,13,108,
116,242,194,115,111,196,154,44,216,56,32,49,104,216,6,73,247,54,90,0,
19,115,15,169,233,104,87,235,241,175,84,88,174,99,239,129,51,215,208,157,
48,93,133,15,203,226,242,117,179,93,6,195,16,174,13,147,88,138,69,13,
45,24,139,82,224,49,204,106,177,65,89,122,209,63,154,58,243,135,156,94,
166,71,97,247,46,133,93,157,191,200,215,129,126,58,36,16,29,109,19,46,
42,49,220,7,53,40,108,69,216,226,174,233,93,16,36,121,160,164,6,62,
162,228,233,35,28,183,171,204,11,58,168,151,227,141,108,178,139,150,47,226,
20,235,105,220,54,29,213,70,223,159,61,20,122,46,237,216,35,177,160,241,
99,80,229,45,164,215,154,167,54,38,99,33,101,229,251,225,230,3,240,179,
37,22,120,154,51,17,71,34,20,199,37,154,115,201,204,114,60,18,87,233,
75,64,124,124,45,100,104,205,244,192,179,120,240,230,48,100,174,108,6,23,
83,155,135,66,156,62,243,84,250,193,115,189,23,158,135,197,242,215,30,36,
59,62,17,48,133,118,78,7,64,192,249,203,166,236,219,49,211,55,64,174,
54,248,219,102,152,155,103,24,222,175,162,225,108,41,116,169,107,2,93,29,
50,37,112,39,188,62,59,242,36,234,221,151,198,111,206,229,255,89,154,21,
63,10,231,78,137,26,96,177,236,5,15,93,63,25,47,189,164,18,87,122,
42,70,242,43,137,185,175,20,52,178,177,1,8,245,63,186,107,10,28,153,
151,174,181,168,25,25,103,150,82,175,110,129,153,86,251,6,224,120,69,215,
81,247,230,223,79,62,11,215,62,25,230,210,193,96,163,18,227,10,177,184,
29,122,228,212,181,238,232,123,47,176,108,58,38,137,116,65,205,212,114,142,
0,165,105,109,255,75,170,68,184,120,94,214,68,223,245,108,216,168,77,247,
97,29,157,82,180,54,159,78,97,184,234,20,5,176,113,22,173,15,41,108,
35,155,166,209,100,202,87,108,240,52,65,127,98,166,203,95,178,112,153,129,
141,122,76,42,117,151,17,146,106,111,87,200,165,51,122,163,3,175,185,44,
254,246,205,150,162,213,125,61,12,76,170,166,247,78,178,132,205,25,190,64,
154,23,197,60,51,55,8,198,9,33,113,248,152,245,3,13,152,102,32,110,
94,84,66,248,234,171,115,136,90,173,16,100,227,113,60,214,181,72,61,122,
66,253,207,23,103,24,11,105,61,226,242,32,125,46,232,152,211,122,229,153,
193,38,47,79,176,137,123,4,136,3,200,30,221,33,231,102,170,182,206,181,
141,75,26,106,238,10,39,64,196,216,191,135,122,175,17,149,177,0,117,103,
253,21,108,86,240,182,183,190,178,117,28,105,10,220,172,132,109,232,232,170,
244,102,75,199,80,12,33,148,89,19,11,115,216,43,174,234,241,6,21,27,
100,119,80,3,57,208,200,94,104,166,230,66,60,43,184,125,227,51,231,115,
95,173,118,216,209,168,34,47,62,231,184,140,186,216,232,205,34,68,8,224,
130,231,23,124,155,0,64,156,38,53,204,198,61,142,204,152,22,51,233,40,
150,176,76,181,66,128,154,208,212,31,228,82,16,196,76,154,180,151,246,166,
225,109,25,135,180,125,82,224,200,13,31,229,158,199,104,193,157,60,193,173,
223,19,216,25,159,76,91,236,75,7,105,24,47,17,189,19,70,144,150,78,
121,67,82,56,94,181,204,146,1,51,69,152,216,165,89,97,108,220,138,13,
204,236,110,182,1,254,135,38,187,123,122,27,180,160,63,152,193,207,81,19,
184,157,79,254,216,76,244,207,234,59,39,105,196,28,207,150,154,229,223,122,
157,251,164,157,117,126,101,224,24,114,90,119,159,218,104,213,253,157,28,78,
64,147,101,15,101,227,153,4,18,194,31,1,187,69,11,19,173,92,53,153,
152,197,191,140,168,201,217,173,232,136,140,223,200,44,5,230,7,213,90,241,
211,156,32,8,170,142,132,48,192,76,238,200,215,25,128,17,88,123,106,212,
62,164,58,48,146,7,86,98,161,46,132,31,31,165,164,187,63,158,153,233,
6,44,106,108,83,205,175,115,73,47,216,210,39,138,62,231,223,57,143,69,
84,198,181,189,135,150,158,179,22,116,2,22,77,174,103,117,235,197,110,74,
169,162,156,144,210,68,52,10,166,35,159,71,225,139,193,188,117,111,143,21,
15,252,131,22,85,56,27,147,100,121,228,77,186,174,224,46,239,202,240,187,
18,113,223,55,45,153,143,196,164,119,116,246,203,210,31,95,83,138,16,25,
229,133,132,146,80,55,180,123,51,140,153,105,1,237,86,222,196,210,67,78,
162,150,255,64,51,26,200,216,111,58,167,15,123,218,29,82,86,105,229,129,
216,13,113,9,135,35,115,211,84,24,71,20,85,250,19,97,242,93,9,97,
69,255,179,216,150,111,118,155,73,73,17,76,26,151,234,102,105,212,99,151,
45,5,22,187,115,13,193,90,246,135,92,74,104,202,16,218,138,143,117,215,
187,145,199,106,187,237,214,151,163,53,130,109,200,64,247,79,8,190,53,192,
243,228,18,164,218,178,37,79,15,175,30,49,209,225,219,46,127,34,188,158,
227,5,110,227,61,95,251,252,244,19,102,47,223,56,14,61,150,175,180,185,
194,213,222,147,198,59,62,210,177,109,170,238,11,111,202,118,203,81,232,27,
106,23,93,157,119,227,182,200,7,34,114,105,162,150,238,33,102,211,244,250,
157,27,32,253,178,184,196,127,84,103,242,163,115,7,117,186,185,20,226,73,
142,48,52,57,147,152,202,186,148,44,17,29,20,137,206,78,164,202,206,97,
222,220,100,200,105,224,239,39,104,17,154,235,255,240,194,239,222,174,4,104,
196,137,186,65,235,47,82,116,94,127,55,7,19,254,155,128,124,50,170,12,
140,135,250,187,36,99,147,169,175,129,239,76,129,170,167,162,123,195,47,60,
147,198,138,215,193,213,242,155,48,72,226,211,239,242,146,81,57,59,247,79,
150,198,230,3,233,217,161,90,35,93,168,247,169,151,227,171,92,110,134,246,
221,156,77,134,160,17,1,64,110,124,139,105,7,9,54,42,44,77,235,36,
194,184,54,16,60,180,153,191,119,162,240,93,46,163,246,58,116,104,181,100,
105,227,239,126,218,2,224,57,16,210,162,198,61,129,199,83,155,58,245,62,
79,125,92,183,163,219,156,146,128,215,19,129,193,32,17,230,203,132,200,182,
112,205,126,70,255,172,254,77,70,8,210,224,64,43,150,2,15,59,145,13,
160,62,98,75,132,227,143,5,251,238,2,35,184,137,121,136,116,234,27,189,
118,236,92,235,77,122,248,231,26,225,72,81,244,49,55,28,178,179,14,9,
109,57,71,36,107,213,72,60,141,28,80,177,149,170,84,31,156,234,89,153,
192,30,32,32,93,190,90,162,191,156,112,142,138,140,207,194,157,241,186,78,
63,231,149,45,193,204,120,72,248,78,91,240,208,204,7,219,5,62,75,147,
21,168,82,11,158,105,32,176,122,208,82,55,3,76,95,49,78,70,16,157,
78,253,185,222,109,242,22,226,212,60,216,34,143,39,74,137,88,99,125,18,
189,163,189,140,88,86,170,234,65,230,177,169,48,143,135,119,145,187,58,14,
251,108,133,40,0,208,177,222,78,102,12,104,57,187,251,67,61,216,78,112,
213,153,184,65,85,50,105,18,133,191,126,203,109,171,167,61,170,163,15,185,
119,145,233,178,84,179,86,223,183,54,151,204,250,126,13,208,23,137,64,76,
107,151,167,16,97,20,110,203,199,172,93,165,175,158,173,69,135,243,126,155,
81,70,118,80,209,198,49,111,243,26,224,242,180,196,25,142,210,39,73,244,
4,136,191,193,54,219,40,54,223,124,106,90,151,55,236,31,49,104,178,98,
13,85,173,59,170,231,70,243,255,253,97,128,1,191,110,235,49,176,84,178,
127,8,207,164,154,147,108,168,37,162,111,231,169,26,82,255,231,69,27,23,
235,139,19,121,210,242,231,10,40,187,189,49,28,118,81,156,111,72,87,58,
108,78,98,211,179,229,223,22,220,160,37,37,222,247,151,235,129,214,162,151,
134,118,232,195,127,138,196,33,176,197,214,78,248,3,201,40,56,119,6,97,
76,92,115,174,226,253,91,95,137,249,222,139,29,114,114,138,7,254,16,196,
249,40,181,27,112,9,231,147,235,23,64,104,206,244,90,162,70,100,170,232,
92,98,79,200,159,27,242,195,36,219,160,69,108,122,250,246,173,23,191,197,
161,104,21,29,78,198,174,192,31,128,161,100,223,248,174,86,38,23,215,170,
221,44,104,167,46,249,101,180,64,236,115,193,213,194,218,153,140,34,18,12,
194,201,164,87,233,192,135,17,172,39,205,209,75,253,228,177,231,119,20,151,
235,171,56,125,37,41,137,111,155,183,106,32,76,129,188,27,199,228,182,246,
148,167,99,149,28,164,176,229,70,201,229,169,36,21,251,170,210,199,148,141,
100,70,168,22,26,99,149,136,187,143,119,209,31,145,251,176,17,101,124,150,
123,60,115,81,149,130,49,24,68,5,227,112,33,169,92,204,81,108,18,3,
120,152,254,247,248,22,62,3,128,94,147,180,187,41,169,178,158,189,118,215,
132,34,66,232,226,41,222,250,87,175,162,238,168,251,240,143,169,204,157,20,
210,199,59,114,192,142,85,25,210,160,221,81,193,107,4,103,11,41,238,134,
88,56,205,206,102,38,63,44,35,95,164,0,6,128,145,131,70,187,61,226,
117,138,38,113,204,248,160,144,212,19,30,215,194,1,165,3,197,16,47,158,
58,221,14,249,45,236,179,48,143,13,141,140,5,159,64,79,155,253,123,98,
200,170,108,204,201,248,22,240,71,40,159,130,39,144,250,183,236,37,97,211,
224,190,174,126,174,219,192,58,201,170,56,35,70,152,213,45,228,17,68,133,
102,10,204,107,4,100,164,220,253,121,88,162,2,192,228,186,212,248,56,107,
20,158,54,9,3,87,205,244,78,109,89,162,14,15,35,135,83,224,124,92,
174,54,30,222,194,165,45,56,141,28,152,115,222,226,28,92,134,104,227,237,
134,139,152,116,33,163,235,69,120,176,146,232,96,202,250,139,113,165,75,212,
36,93,255,91,174,130,148,175,171,219,4,142,207,145,129,7,242,114,209,222,
58,188,149,101,9,50,79,237,100,161,254,219,152,19,180,79,172,165,148,183,
33,35,25,178,177,158,81,129,202,100,153,117,70,208,244,90,179,183,152,202,
117,69,195,246,26,254,25,247,40,67,226,32,236,59,243,59,118,46,71,28,
103,99,139,85,172,214,215,139,251,0,190,122,128,51,169,219,147,50,223,232,
19,98,165,202,227,35,209,36,173,143,94,201,120,248,90,242,96,159,248,194,
146,109,127,72,231,63,18,149,27,225,195,24,132,233,53,184,51,160,227,170,
171,103,120,141,34,183,152,82,186,56,156,56,191,197,36,121,15,190,108,65,
131,230,167,205,52,1,130,20,218,83,152,180,5,71,28,22,126,118,246,29,
247,215,46,224,220,56,194,192,225,220,58,47,204,46,200,115,2,2,176,170,
45,38,160,97,24,78,73,183,24,92,232,200,181,81,68,89,213,171,174,97,
74,19,249,234,174,231,85,147,113,246,221,73,82,249,235,6,129,225,6,0,
114,182,108,62,123,34,255,53,172,87,5,142,187,156,181,85,18,131,209,78,
37,171,32,164,199,176,25,128,165,110,167,87,127,167,4,248,47,7,32,199,
247,183,76,227,169,5,107,35,152,137,211,15,106,79,36,91,217,135,11,214,
42,64,239,161,40,159,39,171,158,37,64,164,96,201,156,1,14,200,111,48,
18,61,45,116,173,165,16,23,46,184,163,183,124,98,145,188,202,165,187,146,
247,196,247,180,36,152,222,80,230,247,140,245,7,11,139,32,0,196,146,182,
60,112,222,38,73,152,180,196,182,118,92,226,80,150,243,149,149,30,255,255,
179,255,141,2,49,207,2,217,154,100,46,225,207,25,196,9,5,95,114,119,
176,106,123,32,32,141,58,211,152,115,47,43,250,108,91,207,255,229,55,35,
85,198,56,135,135,240,237,3,103,3,130,172,113,50,162,251,195,71,38,151,
40,73,140,223,196,204,242,99,20,15,255,192,47,29,31,37,87,232,150,26,
234,197,129,222,37,97,98,174,250,7,208,27,209,186,198,99,30,152,205,79,
198,31,172,133,201,146,218,241,7,228,114,42,77,15,144,240,238,198,187,44,
104,59,244,98,53,108,168,198,153,48,137,41,160,133,115,99,235,214,179,122,
179,59,198,35,20,181,38,229,95,155,3,37,22,148,142,118,139,247,140,53,
202,236,225,87,224,152,137,17,254,63,184,144,75,147,119,86,4,78,106,6,
1,120,150,85,239,176,176,186,27,172,42,6,203,52,83,53,250,190,233,86,
144,123,130,214,17,1,22,213,171,150,95,20,209,34,223,215,69,86,85,167,
195,156,68,176,184,174,238,183,19,93,239,216,212,206,56,175,29,132,13,27,
214,229,184,105,192,40,124,200,74,54,50,151,117,254,31,45,52,123,60,167,
134,154,42,72,31,231,226,201,220,202,131,175,24,177,45,172,50,72,142,35,
152,73,202,54,183,214,214,83,225,129,54,18,99,243,26,233,108,58,121,6,
141,73,151,115,74,33,142,137,128,171,121,195,170,183,66,133,33,250,225,210,
235,205,176,39,235,154,185,193,217,247,79,252,195,160,250,167,5,183,4,55,
118,243,163,47,96,79,188,70,226,90,116,88,126,250,192,203,21,174,253,39,
40,136,191,251,230,83,38,123,42,255,55,228,213,17,249,79,127,143,51,62,
60,167,129,84,75,175,246,68,13,54,196,8,63,158,44,255,178,207,154,30,
91,87,62,24,210,243,64,41,47,63,41,131,4,56,138,128,8,45,119,36,
175,250,197,1,168,215,209,161,181,192,236,246,127,194,149,250,149,252,143,125,
123,150,149,205,35,79,134,2,237,233,77,28,16,37,133,84,18,237,236,220,
213,185,149,119,66,205,145,222,187,79,92,139,212,246,231,160,23,166,138,145,
55,62,132,207,246,177,92,203,206,114,49,254,201,42,195,160,146,130,241,3,
213,235,1,45,143,51,21,213,114,76,0,124,168,32,210,199,91,180,27,229,
82,41,163,4,155,166,157,226,35,112,143,99,231,148,191,73,98,106,246,26,
90,214,137,208,5,243,249,164,238,103,214,254,186,221,57,83,44,122,194,94,
236,186,93,139,234,142,118,224,235,107,122,191,8,219,239,51,151,94,33,74,
145,19,215,190,66,218,240,114,176,146,233,29,168,67,32,1,74,40,183,243,
41,180,107,31,73,195,174,31,171,64,185,69,220,187,216,182,205,230,35,112,
46,180,241,212,86,219,150,95,104,20,228,69,1,243,204,243,0,232,255,93,
18,167,198,240,153,165,245,14,97,217,91,57,1,0,205,65,186,135,9,102,
25,150,118,35,186,36,14,221,162,0,120,153,161,220,158,202,70,168,243,13,
169,182,236,71,89,203,7,254,217,215,104,126,37,122,173,112,129,58,156,89,
184,225,148,191,178,133,104,102,150,80,216,126,114,98,7,197,187,197,227,225,
129,72,116,210,201,225,48,207,230,82,141,162,97,139,212,198,162,204,243,215,
240,210,238,70,46,224,32,80,125,111,65,184,191,184,152,228,53,221,116,247,
93,130,107,191,205,135,47,34,81,158,187,237,238,205,169,250,116,35,209,133,
75,224,209,16,102,238,120,197,15,214,228,80,191,43,96,128,195,153,16,205,
165,246,33,174,224,220,10,227,125,112,139,104,165,221,74,115,143,42,82,107,
239,201,33,107,198,232,65,244,28,187,35,100,7,61,57,126,71,250,121,176,
169,76,210,214,94,65,151,19,19,206,174,100,225,84,221,57,148,2,71,94,
69,107,150,48,228,176,172,16,90,178,54,11,248,254,200,76,31,176,61,108,
19,14,25,28,230,139,27,220,45,122,94,165,193,77,163,100,45,230,153,187,
132,37,205,76,146,160,68,73,226,159,119,209,113,184,191,38,115,167,229,70,
248,160,113,181,165,24,131,9,215,81,109,28,227,218,56,241,64,189,190,208,
119,174,178,36,84,8,63,164,240,125,183,98,66,65,16,81,27,211,28,72,
92,230,19,1,203,98,159,185,240,131,203,178,2,72,118,77,168,138,255,137,
57,206,49,10,186,86,73,96,223,99,15,199,57,192,19,102,65,201,204,13,
52,135,245,104,123,157,231,1,155,18,221,208,33,90,219,223,246,86,178,223,
197,111,238,209,110,226,93,249,129,216,219,228,196,13,33,160,44,235,101,182,
34,190,7,224,235,208,250,31,237,9,223,48,49,136,204,222,1,3,235,249,
121,43,180,96,247,242,216,191,55,15,249,64,114,10,81,60,207,137,211,106,
124,242,203,179,157,169,108,208,123,103,117,124,75,16,72,83,78,23,39,13,
14,112,140,218,135,248,86,119,123,14,207,2,225,70,253,62,23,10,181,4,
105,209,225,21,207,58,188,23,234,96,218,88,249,50,48,173,160,65,63,150,
143,117,93,33,67,121,84,66,192,55,61,216,220,122,41,172,14,71,227,132,
17,76,92,131,147,194,218,11,192,155,244,171,32,141,150,212,40,80,222,30,
78,135,17,201,234,34,215,182,200,11,183,65,173,11,120,130,77,165,100,197,
47,14,24,47,54,213,229,78,252,142,27,132,138,210,5,204,42,42,105,136,
239,188,185,111,204,57,181,255,234,163,184,193,248,85,24,168,77,74,75,177,
145,46,134,113,211,134,49,185,60,191,42,82,42,222,104,114,33,24,40,24,
1,64,114,61,105,90,33,176,216,255,250,31,154,37,85,209,154,3,111,237,
63,27,86,116,83,5,44,150,129,96,217,64,127,122,100,133,149,177,213,221,
185,138,101,96,46,193,192,127,228,72,248,95,89,206,145,84,249,108,105,124,
104,165,39,213,34,234,194,8,213,52,4,41,203,59,243,86,75,141,73,248,
203,245,122,116,51,28,27,101,223,86,170,125,114,66,196,94,255,33,231,245,
67,165,203,130,89,42,252,121,81,205,195,208,253,150,61,195,122,104,47,63,
123,62,249,165,226,220,45,57,252,103,236,90,61,96,222,219,163,14,199,182,
131,132,41,160,59,69,48,234,95,179,134,179,120,219,227,138,30,116,202,204,
87,187,155,240,232,35,216,150,96,236,152,84,138,14,117,237,219,147,2,59,
24,38,241,123,52,244,202,253,48,2,3,64,29,43,98,75,171,227,215,112,
55,141,31,25,241,71,6,73,71,207,152,195,93,175,105,201,67,0,106,136,
71,172,2,39,179,124,75,43,176,172,207,62,68,203,192,80,170,70,84,193,
124,139,122,191,235,175,47,66,234,154,192,180,52,131,251,108,81,34,59,9,
102,154,60,122,154,171,152,100,135,162,237,121,140,130,20,250,5,183,185,35,
165,197,199,92,238,211,18,108,131,129,221,204,1,219,56,124,187,72,48,87,
194,77,9,74,28,195,231,10,238,78,147,36,161,250,156,161,14,8,87,235,
166,137,11,204,248,195,25,114,34,141,55,216,117,253,41,238,231,46,0,158,
112,217,119,98,66,15,13,181,83,22,97,132,113,154,154,209,135,246,11,139,
185,189,203,158,35,34,150,134,57,73,76,44,88,124,60,33,159,230,168,83,
32,131,131,196,105,186,210,238,43,148,95,154,99,212,20,97,46,112,166,210,
116,85,176,160,247,29,91,95,1,244,205,168,249,240,168,55,107,29,5,72,
40,131,118,110,115,170,67,15,94,248,44,215,143,197,238,103,163,113,48,77,
104,141,76,89,10,65,68,109,38,251,252,225,6,195,134,104,51,243,58,239,
96,208,118,100,146,248,191,82,52,20,63,132,6,14,150,156,160,67,244,241,
158,181,68,179,16,209,162,117,95,6,109,213,68,75,170,62,27,73,179,130,
135,184,9,116,193,200,156,159,173,248,188,42,171,79,121,225,212,28,186,101,
167,122,184,254,255,193,131,129,220,107,179,83,255,99,86,218,181,202,207,231,
72,96,248,248,120,51,38,32,165,140,131,193,48,144,77,254,231,235,178,54,
26,30,72,213,255,186,236,68,176,109,220,15,43,219,96,16,4,73,227,155,
28,18,132,172,20,107,230,201,58,199,90,252,48,36,239,239,113,93,33,139,
181,186,31,3,51,27,215,242,164,92,175,185,147,78,163,20,221,29,220,45,
151,17,118,7,10,152,38,196,66,83,192,229,122,156,241,207,228,163,197,151,
127,213,192,55,169,71,0,109,14,132,226,217,130,80,34,196,170,135,2,42,
227,136,40,204,233,225,51,68,227,218,67,223,17,188,70,234,193,43,248,117,
154,236,116,198,229,105,19,212,167,227,103,121,202,91,170,5,162,16,207,202,
122,168,90,19,168,16,212,99,130,38,145,32,107,148,61,234,138,204,177,49,
169,189,70,236,239,54,123,110,120,7,7,108,23,168,12,228,234,113,111,86,
88,69,187,111,220,240,1,22,162,40,165,204,238,214,109,253,79,63,208,199,
240,112,209,101,205,232,3,125,77,19,129,95,242,107,25,86,64,202,221,84,
65,184,205,10,200,126,209,31,109,16,242,138,197,5,152,140,209,61,7,142,
158,3,25,62,194,88,68,243,89,38,215,93,223,23,238,54,29,193,95,11,
204,136,91,31,103,159,16,136,254,30,153,97,123,195,71,40,128,185,185,63,
225,2,21,123,216,174,135,12,230,228,187,165,118,166,53,4,119,26,21,11,
82,25,98,103,217,43,131,17,167,79,233,42,5,224,66,202,237,167,171,62,
176,58,123,62,120,115,194,117,76,9,165,88,111,207,72,234,126,164,81,57,
247,36,18,107,228,26,235,224,193,121,194,13,30,59,189,111,99,2,137,215,
113,54,123,195,27,138,89,4,135,170,181,70,241,207,225,194,20,24,210,174,
93,255,139,190,100,245,56,117,205,122,84,180,36,247,224,88,192,88,223,68,
228,166,19,138,94,200,7,77,30,62,156,239,173,32,218,10,206,205,25,53,
206,53,88,117,217,77,169,146,236,193,80,231,215,20,140,188,201,203,46,114,
253,191,72,156,1,11,200,114,55,140,69,135,132,234,10,10,182,220,125,191,
210,3,242,235,121,248,3,185,0,82,14,138,163,55,75,148,141,249,111,171,
146,186,229,128,143,234,138,154,20,168,231,203,200,228,78,221,53,165,85,56,
151,17,134,204,117,16,78,37,233,141,97,70,101,83,78,171,149,110,157,6,
4,169,189,57,199,19,238,143,75,212,99,143,100,148,245,35,202,193,231,47,
145,184,90,19,73,192,155,22,191,242,154,99,199,47,227,94,238,24,224,179,
78,11,9,203,4,220,65,166,111,217,204,102,102,49,5,172,108,40,162,41,
58,163,218,227,85,22,128,119,255,213,11,162,167,82,29,75,85,22,59,246,
38,214,72,141,43,128,186,15,14,15,8,234,184,216,110,146,216,194,28,179,
225,150,90,105,16,60,12,43,250,97,84,147,34,210,7,169,9,149,144,51,
7,66,166,56,236,164,68,22,46,250,75,39,28,178,37,194,25,57,181,91,
219,162,223,41,140,253,122,210,11,241,48,241,64,24,135,39,17,111,248,63,
106,130,204,125,96,185,135,56,166,65,144,79,162,102,63,74,2,233,97,174,
163,94,60,205,53,0,31,32,100,160,241,125,82,149,76,71,254,57,115,144,
110,202,80,127,62,217,192,137,18,160,66,162,35,58,61,164,122,94,152,9,
165,96,151,114,227,34,57,23,109,13,177,32,126,11,129,218,100,201,15,244,
196,147,218,132,69,74,106,107,51,188,76,0,155,98,176,208,201,227,66,240,
199,57,40,164,181,150,207,108,9,189,118,224,13,85,210,226,164,40,188,216,
154,69,197,120,141,192,63,82,232,59,131,20,73,98,17,203,69,62,9,30,
233,21,93,178,93,31,62,239,64,58,23,244,124,152,220,217,201,232,112,22,
214,236,106,255,214,199,247,167,56,75,249,119,3,70,181,200,18,51,181,222,
254,55,140,73,188,226,219,178,32,154,100,243,94,152,228,42,117,217,169,238,
233,3,170,202,27,20,77,228,2,0,10,187,38,71,241,178,207,80,173,179,
104,240,240,80,254,18,85,68,207,84,123,221,135,130,191,220,55,240,49,153,
246,31,237,180,227,161,85,117,63,204,125,118,249,128,166,241,105,134,99,161,
178,246,122,147,149,219,230,146,35,88,155,243,41,33,5,152,199,207,17,189,
41,10,104,251,49,135,172,167,7,100,179,23,144,187,125,136,109,148,147,158,
237,75,13,85,205,32,69,77,68,110,118,89,190,233,2,112,240,32,70,83,
112,39,250,213,0,176,33,214,184,105,133,81,105,210,164,178,134,53,140,70,
51,137,91,247,197,34,237,125,28,155,18,177,245,232,26,128,60,81,42,3,
247,101,208,40,173,141,192,201,237,169,215,69,81,131,18,0,24,68,176,228,
31,206,90,110,23,192,49,155,162,125,216,12,254,71,97,127,150,95,119,148,
14,7,146,49,189,142,124,176,34,2,149,148,100,138,253,177,13,246,184,73,
52,245,31,124,115,57,56,29,66,30,143,67,234,238,200,142,124,181,71,242,
104,213,66,217,221,20,205,200,67,8,50,115,24,106,220,110,83,213,211,5,
148,88,229,71,246,198,83,201,245,113,148,255,253,232,68,100,128,179,111,236,
214,122,252,181,24,33,104,159,110,126,134,253,180,42,124,129,154,50,53,169,
118,215,133,223,11,89,206,48,197,73,21,44,24,123,68,237,34,34,54,159,
230,5,176,186,140,34,157,126,180,93,193,51,173,74,126,88,81,193,87,75,
42,5,148,86,18,82,51,168,201,248,81,171,180,161,21,157,76,52,196,209,
18,23,83,190,47,202,10,11,160,27,240,128,175,25,190,101,253,166,203,170,
194,4,231,187,35,51,210,18,230,190,68,233,251,186,153,39,244,198,190,6,
93,238,90,219,90,142,2,83,200,145,27,116,104,90,49,178,83,221,152,135,
146,160,218,127,167,237,201,3,217,140,130,80,3,203,85,152,181,25,171,109,
150,125,174,208,57,51,122,210,183,235,67,216,76,91,153,177,194,37,59,7,
29,59,22,128,158,28,159,251,75,14,73,67,61,219,104,179,87,238,1,10,
152,8,234,201,81,73,235,252,237,6,60,34,228,76,203,208,80,70,152,244,
46,87,35,235,199,163,55,234,8,161,249,218,143,195,243,240,166,225,146,251,
61,140,39,144,183,177,182,191,207,17,157,17,116,132,183,13,244,170,61,199,
55,55,238,42,15,104,235,201,145,12,224,107,186,2,5,147,2,118,221,151,
229,109,106,164,181,231,159,81,183,193,104,130,240,35,71,154,217,35,1,131,
30,136,139,54,225,211,60,180,149,251,29,27,239,124,46,76,143,192,112,239,
181,168,152,234,231,161,186,125,133,125,125,26,155,92,234,121,35,32,44,42,
36,194,215,204,95,243,27,83,34,121,94,14,201,210,193,248,242,131,217,12,
0,27,156,3,28,97,107,71,100,41,161,113,199,191,147,65,59,198,154,110,
149,242,190,51,131,247,181,250,139,149,20,219,8,216,136,120,248,207,144,172,
125,141,138,65,122,73,47,61,155,41,112,122,143,225,183,127,164,117,124,86,
79,139,221,58,178,44,121,253,74,235,215,212,186,80,99,190,158,139,75,87,
46,223,119,184,190,58,172,169,163,133,100,90,129,131,197,188,229,227,27,94,
112,177,64,142,92,184,37,58,118,146,3,84,182,212,200,247,84,175,58,175,
43,60,59,41,135,22,187,150,220,33,217,155,144,161,103,62,23,245,206,220,
171,226,42,93,135,18,95,199,133,57,223,240,155,92,79,149,108,247,201,97,
168,186,156,216,14,144,99,98,150,157,189,72,201,161,150,206,12,250,164,129,
10,185,137,7,132,251,44,168,93,36,254,70,172,216,36,71,23,139,217,7,
243,248,116,173,192,78,51,86,66,212,117,143,161,159,187,246,47,241,58,168,
44,167,76,102,31,243,14,143,26,207,248,73,63,25,143,194,99,10,233,190,
59,176,115,186,138,173,254,126,21,28,164,168,208,229,163,252,142,20,29,224,
74,203,80,193,0,198,231,211,236,111,144,219,157,145,202,199,11,190,198,60,
100,115,54,19,227,130,133,144,87,113,109,37,29,54,179,1,173,54,74,95,
118,253,121,173,33,239,186,221,238,163,16,240,129,233,33,39,35,206,203,54,
46,78,158,102,208,49,148,181,52,157,43,195,130,12,74,16,20,129,133,103,
254,21,80,193,128,30,193,26,241,196,124,211,156,54,24,106,224,128,154,162,
117,128,60,37,115,90,43,235,217,95,146,68,141,171,126,152,174,226,213,105,
213,162,204,20,123,131,248,24,146,202,81,231,197,230,218,6,18,33,154,37,
100,114,237,16,241,232,93,163,8,137,227,220,248,1,178,200,123,49,86,250,
108,239,48,14,108,80,175,244,10,191,73,100,192,44,114,62,2,92,62,248,
193,9,145,1,168,139,173,23,161,7,219,88,186,109,102,38,39,130,254,93,
109,240,230,224,139,158,64,135,158,200,221,218,192,244,60,31,216,56,167,33,
195,13,235,74,10,214,28,239,166,31,122,231,45,151,184,133,117,209,85,251,
38,101,46,137,31,52,45,46,157,34,3,116,13,83,212,226,176,79,41,70,
15,22,154,124,164,19,97,212,197,119,97,140,254,38,25,158,173,158,4,251,
178,226,79,210,126,4,193,65,67,45,86,119,121,214,200,249,13,45,66,5,
211,234,50,132,16,31,141,8,109,90,104,107,245,131,48,213,107,211,101,37,
30,145,187,189,114,96,236,136,8,138,69,59,143,121,87,195,74,230,109,77,
21,15,255,203,231,2,100,245,252,171,166,205,224,33,216,68,122,28,22,177,
26,185,11,158,249,6,196,254,27,26,51,75,144,232,51,43,48,94,12,179,
170,187,171,196,236,206,91,59,134,134,99,169,42,201,195,170,166,248,163,116,
250,232,74,254,125,105,103,7,25,55,151,171,200,199,32,41,234,164,214,21,
126,168,89,182,6,114,45,18,66,117,167,185,223,174,145,213,173,13,120,2,
17,2,234,154,247,211,152,151,68,178,189,243,191,100,69,56,220,204,135,8,
8,243,106,81,200,161,112,254,168,188,204,223,41,199,179,118,175,24,80,181,
170,251,119,53,153,144,106,152,193,156,110,2,76,22,210,189,54,142,117,176,
41,12,75,205,151,114,6,13,189,73,198,171,142,128,101,182,209,222,11,114,
45,39,232,119,242,223,111,146,173,163,117,232,158,82,227,218,55,181,153,209,
191,44,235,153,169,79,18,202,33,154,149,43,125,156,37,109,244,43,86,226,
56,81,141,51,169,137,156,143,5,117,89,207,170,127,215,28,116,171,7,16,
180,47,117,179,112,16,184,46,223,127,230,15,226,49,143,34,161,0,74,190,
164,205,33,6,69,47,76,151,176,62,237,109,170,137,103,59,171,2,60,229,
86,41,126,159,61,9,180,190,18,223,84,23,218,160,202,214,171,221,113,204,
223,96,236,3,154,57,72,156,53,119,189,98,142,172,23,47,223,207,157,224,
57,119,67,120,18,183,228,129,205,184,146,183,200,106,135,187,11,115,171,131,
251,158,86,210,209,130,59,30,225,207,255,154,136,104,232,164,216,111,202,39,
238,160,200,71,247,26,87,37,249,213,204,171,77,16,203,192,251,40,218,194,
95,209,125,2,40,146,99,233,97,2,230,42,37,159,217,203,58,10,96,182,
87,9,157,37,95,143,33,75,0,126,233,64,250,86,148,124,114,213,94,31,
0,78,79,79,222,171,188,103,37,48,242,25,135,37,248,43,201,102,126,30,
100,113,223,59,89,234,155,103,117,168,48,180,178,58,35,117,89,197,128,226,
143,119,68,57,227,238,78,14,8,80,192,90,193,1,100,162,163,120,57,94,
116,120,206,152,147,169,54,85,42,86,144,120,19,99,62,206,56,224,76,128,
251,235,161,87,69,139,212,197,6,191,205,144,101,220,184,119,103,245,6,58,
183,235,138,35,144,193,33,211,70,5,69,3,102,203,97,194,49,102,114,200,
52,199,181,175,114,151,75,40,18,3,10,73,189,60,47,246,169,114,6,229,
65,165,111,45,114,7,51,136,91,213,86,46,225,115,110,169,124,107,27,26,
32,226,191,146,204,127,15,192,70,59,90,187,83,189,66,74,43,106,248,135,
173,68,134,6,70,29,237,15,147,187,75,94,62,253,39,202,198,17,10,42,
17,170,214,42,24,75,111,46,1,39,12,20,163,215,188,178,161,61,191,80,
127,254,5,8,191,218,123,54,100,108,192,225,250,11,159,198,32,103,77,33,
72,35,22,227,209,71,206,205,179,45,195,11,59,1,125,216,24,109,81,44,
177,108,134,55,180,112,120,22,112,47,193,108,184,206,50,45,91,19,179,17,
64,241,139,188,116,249,37,142,99,243,134,29,141,233,131,199,53,191,77,133,
1,130,226,123,237,139,236,88,124,251,156,103,146,19,194,154,14,104,17,186,
224,105,154,25,43,154,2,100,58,218,113,159,64,135,241,111,232,168,201,201,
255,210,172,125,247,147,19,14,159,203,141,177,112,138,78,106,147,76,34,124,
193,212,81,244,140,12,98,186,140,231,112,24,201,156,35,87,63,226,132,82,
242,34,126,13,25,93,191,210,33,108,109,167,141,54,137,243,188,174,7,154,
34,150,166,58,77,250,40,77,63,235,52,242,134,63,14,44,133,88,72,217,
4,216,7,212,165,80,138,105,150,212,172,80,213,55,164,231,22,234,128,223,
80,53,230,137,13,232,174,84,130,18,222,110,192,9,114,210,213,161,76,212,
89,121,158,133,55,189,140,211,65,214,202,133,208,12,223,229,237,202,131,113,
131,128,189,56,172,139,26,159,43,75,179,164,52,199,246,144,186,76,255,50,
0,243,35,107,159,192,242,228,194,64,173,204,29,200,146,187,117,191,55,215,
123,148,157,165,204,129,176,90,56,155,10,86,24,237,70,159,164,238,197,183,
218,222,23,227,139,159,121,169,153,244,163,59,220,128,211,45,186,64,205,15,
108,212,2,16,99,232,130,209,70,224,159,2,183,217,187,41,43,62,121,158,
237,206,181,1,41,115,64,118,11,122,24,47,119,19,252,15,79,206,35,27,
244,246,90,32,145,55,118,149,255,220,93,169,24,253,78,247,129,226,45,106,
190,92,81,86,92,107,235,67,94,236,37,184,157,40,70,69,210,210,229,208,
45,199,17,25,21,63,155,44,200,30,112,139,74,123,197,199,131,127,176,222,
164,226,78,206,56,140,9,137,152,44,246,78,127,250,215,40,181,188,57,235,
36,37,183,16,21,70,166,215,58,172,137,159,76,226,5,140,62,246,223,238,
54,15,2,212,228,87,10,80,27,172,202,63,128,132,117,56,254,85,163,79,
47,191,180,135,19,60,133,249,43,165,183,91,179,0,184,162,237,99,61,44,
62,72,27,64,12,82,15,231,212,134,147,94,247,63,62,65,203,62,63,208,
1,254,11,10,73,133,42,53,81,151,235,54,106,23,106,133,187,45,67,11,
220,225,54,217,139,72,65,24,218,101,144,141,196,88,138,115,231,49,182,77,
105,63,10,186,191,129,125,7,195,86,255,239,79,88,91,104,198,237,25,142,
184,215,24,191,254,220,211,216,176,142,167,54,180,238,41,193,177,183,134,162,
33,208,20,151,217,77,238,191,232,55,76,60,117,52,87,56,61,110,238,135,
122,201,202,58,85,125,4,23,134,232,10,23,18,149,122,116,28,243,196,33,
22,171,33,243,48,180,94,122,145,168,54,194,80,56,79,188,144,153,154,185,
219,200,76,64,155,221,18,102,43,112,37,62,215,95,63,190,161,149,194,23,
15,237,228,170,241,171,168,210,81,232,66,145,32,105,240,146,3,115,36,144,
15,223,90,251,152,171,182,191,144,220,16,72,80,126,119,247,78,146,88,3,
164,181,76,161,23,92,211,178,84,20,250,218,69,22,222,204,41,89,82,160,
91,96,118,47,242,172,147,51,15,233,200,124,62,53,24,91,89,45,83,20,
221,234,89,42,62,67,221,9,63,113,34,170,117,42,102,152,22,20,48,74,
15,0,163,53,243,82,198,54,209,39,124,42,178,14,199,11,222,84,44,34,
240,146,136,128,225,36,94,254,224,229,25,174,220,11,76,118,61,19,226,54,
62,108,218,152,42,27,191,132,254,53,232,167,57,220,70,207,187,24,35,210,
251,71,39,236,56,136,113,157,188,131,165,134,182,87,231,60,96,211,101,222,
235,215,86,227,123,98,83,56,175,252,13,209,18,192,168,169,155,106,207,99,
176,59,188,244,30,58,77,168,180,214,80,200,228,12,206,13,250,58,114,62,
128,147,68,34,88,176,235,17,174,36,154,126,129,108,165,166,178,92,123,210,
71,101,101,240,159,50,171,95,93,19,216,232,131,90,247,173,1,228,223,125,
209,118,54,67,56,130,23,3,132,88,68,93,130,52,250,57,196,172,165,212,
49,90,87,98,33,200,254,203,199,43,50,177,150,18,41,218,3,84,7,124,
244,188,128,197,143,83,175,18,113,47,6,233,102,247,217,228,88,218,113,248,
102,10,110,96,67,13,104,162,181,228,52,147,61,6,240,61,222,31,174,255,
180,217,140,153,208,148,41,216,59,245,15,182,31,113,248,211,85,34,120,161,
67,179,95,46,232,227,209,191,162,73,67,98,20,32,16,159,167,118,72,41,
110,17,152,39,57,140,245,99,248,197,255,63,72,155,132,18,87,207,241,17,
82,232,4,159,9,135,30,54,7,228,220,133,170,58,103,50,123,159,107,57,
143,7,186,29,130,69,199,39,60,242,30,36,40,159,246,70,127,45,45,194,
113,31,113,85,63,94,248,45,180,242,52,57,50,68,243,122,83,40,233,249,
30,93,74,34,165,209,93,158,88,39,29,67,73,239,137,0,141,105,31,61,
52,206,146,61,43,169,249,144,64,24,112,195,219,141,197,15,11,232,55,225,
231,167,33,227,86,182,213,83,138,184,25,111,80,135,115,203,120,134,43,54,
118,104,222,51,33,70,91,144,226,163,132,241,117,252,80,218,68,28,246,147,
63,212,205,175,225,156,189,64,77,113,141,85,64,155,158,11,243,177,60,194,
116,132,214,175,191,86,106,132,37,70,166,36,75,129,212,95,197,227,49,17,
143,54,18,21,146,162,132,154,42,222,252,176,80,59,219,26,118,103,154,204,
236,158,63,124,94,30,37,38,93,195,182,7,89,157,254,0,129,176,6,40,
241,126,20,247,202,48,206,118,190,200,72,2,241,47,223,122,191,82,127,46,
14,130,30,170,123,249,18,54,201,151,143,78,73,6,168,152,122,24,7,42,
175,56,56,193,112,137,173,34,199,12,236,144,192,161,186,205,246,141,100,79,
70,188,140,93,131,10,138,255,185,149,22,176,215,163,131,214,9,59,11,29,
100,208,239,15,98,76,78,35,129,191,16,208,123,147,25,232,200,252,179,69,
39,240,34,1,183,255,65,243,65,220,163,110,151,85,72,180,100,208,49,1,
7,23,52,220,14,181,106,192,148,47,175,168,40,216,118,15,65,245,218,140,
0,165,169,58,246,118,79,14,59,45,185,250,39,20,207,87,73,123,90,194,
55,45,168,21,97,59,116,137,97,91,86,130,18,150,187,123,43,112,93,14,
224,175,47,228,179,207,130,237,155,51,185,249,83,94,38,59,64,41,93,226,
113,129,48,253,166,49,56,39,114,108,196,118,81,159,250,186,49,110,79,18,
21,223,66,227,97,0,162,114,114,199,164,192,194,73,125,139,210,195,254,69,
31,101,63,227,15,249,180,137,93,98,190,214,238,130,92,193,44,108,114,33,
107,86,186,84,26,20,100,160,12,59,225,43,22,80,238,66,159,61,86,200,
165,127,34,57,0,9,251,63,83,172,206,229,225,69,128,199,49,120,62,127,
178,144,72,29,81,158,57,107,9,77,182,232,171,220,215,183,72,176,85,237,
203,99,218,1,81,89,225,227,51,208,227,20,132,193,205,96,94,10,55,27,
92,83,0,184,199,133,173,21,105,13,70,95,92,4,249,251,121,220,53,91,
65,147,235,105,36,86,201,240,222,182,105,96,40,197,230,253,131,255,226,157,
42,155,119,55,31,85,225,88,220,231,106,136,239,127,240,39,157,123,27,191,
8,157,247,206,2,108,170,74,29,153,99,184,243,218,200,154,6,73,43,169,
66,181,29,98,199,150,30,35,217,171,174,195,35,75,174,104,4,131,70,53,
8,143,41,74,84,5,128,26,84,37,82,225,53,4,29,96,197,228,149,248,
42,230,118,220,15,243,112,95,74,227,83,99,107,253,242,48,127,74,53,128,
33,248,100,24,132,142,2,117,218,29,108,153,194,119,239,219,189,200,233,24,
117,64,117,148,160,162,178,36,201,162,148,103,215,94,223,86,195,140,214,224,
106,7,87,9,58,84,89,1,178,176,152,250,44,117,94,147,182,113,102,108,
45,47,89,19,184,156,100,20,202,74,239,141,205,178,73,175,15,254,59,124,
137,62,153,142,151,223,200,94,240,244,61,31,201,41,36,117,85,1,87,96,
50,204,126,221,209,135,142,85,32,255,234,138,110,3,186,130,226,205,230,20,
68,128,58,30,94,102,17,242,24,159,133,118,219,128,128,69,54,31,40,94,
50,241,17,58,163,44,191,220,192,250,39,44,221,51,179,141,212,98,43,8,
187,81,106,174,105,9,249,229,49,237,130,191,108,22,137,201,254,113,234,127,
229,25,97,76,154,206,102,89,180,231,32,155,207,20,178,72,194,11,186,71,
234,187,193,20,219,129,244,64,105,84,34,201,139,116,168,171,140,80,5,57,
172,56,222,88,55,170,9,156,145,23,28,203,254,245,46,108,239,207,239,204,
98,172,82,152,238,149,121,42,124,109,91,190,15,213,235,88,170,144,104,135,
199,154,96,233,253,192,156,133,252,110,200,19,120,136,224,150,208,7,242,138,
98,207,137,49,82,200,180,211,52,74,84,221,20,230,173,79,237,231,189,225,
186,119,8,207,212,91,75,236,246,30,57,7,239,40,242,98,144,138,22,145,
181,242,213,176,114,65,215,6,197,149,193,90,198,21,84,157,173,124,85,219,
168,215,100,59,4,24,196,37,7,113,220,119,96,38,28,10,155,16,99,79,
243,223,187,253,31,128,91,46,211,242,77,243,53,194,109,207,57,216,83,217,
153,174,8,122,62,56,3,142,142,7,129,149,215,32,165,131,169,129,227,160,
37,150,85,154,109,255,3,142,87,197,164,66,76,228,12,244,169,184,253,16,
14,111,226,228,69,34,250,23,173,145,38,41,27,125,185,182,37,77,87,157,
222,173,209,250,202,65,84,119,209,75,23,227,34,121,166,144,7,24,71,18,
87,124,16,220,61,187,188,38,183,34,36,95,128,245,60,226,226,53,193,226,
58,208,11,224,151,165,204,87,89,106,39,231,55,155,22,202,169,111,107,135,
127,221,151,21,164,135,178,91,5,175,0,158,60,213,172,243,121,54,223,42,
107,80,132,220,193,157,174,106,145,35,81,132,95,253,221,202,228,153,229,141,
202,235,212,198,130,97,15,208,158,180,199,219,227,58,28,252,205,225,165,183,
187,120,44,139,60,113,104,33,143,62,244,140,106,219,185,33,140,9,60,8,
27,132,255,108,88,14,157,86,23,92,219,61,255,39,250,71,126,243,68,163,
40,199,218,24,68,14,133,169,45,86,91,159,204,136,142,105,216,45,219,232,
192,16,30,215,205,79,241,190,148,118,17,223,229,246,0,145,91,54,227,171,
13,123,152,97,209,218,137,171,99,85,239,91,203,27,50,183,164,18,75,51,
110,161,97,33,49,5,75,216,211,55,213,122,39,93,52,9,11,139,4,59,
109,68,69,104,161,73,62,244,156,133,239,74,1,92,167,225,42,112,88,40,
119,201,142,221,76,233,130,71,163,119,164,123,96,56,229,218,142,63,36,185,
221,238,97,8,199,107,240,9,35,159,218,61,54,165,88,149,159,186,204,70,
132,48,77,179,24,55,130,27,65,52,133,222,38,84,134,69,60,32,11,25,
35,85,45,219,161,72,88,125,24,17,79,31,220,235,146,16,101,41,23,153,
80,56,117,189,71,89,26,83,98,15,228,190,101,243,154,89,111,69,95,6,
1,24,212,6,159,138,231,187,140,197,28,178,178,14,31,173,167,110,251,65,
62,226,46,251,214,139,246,228,250,33,36,18,124,124,157,183,4,173,179,42,
198,73,162,132,67,149,218,194,190,79,148,36,88,49,172,246,155,195,117,8,
192,201,134,123,250,83,155,168,6,215,205,223,192,6,211,145,67,189,119,26,
156,209,11,72,63,113,158,199,136,133,244,102,226,141,194,235,197,82,41,54,
228,164,1,1,26,186,178,71,215,19,192,34,97,1,15,254,3,239,63,18,
169,132,12,212,168,181,175,246,119,82,204,199,161,15,153,173,232,184,26,83,
135,218,112,40,194,146,80,17,185,220,75,254,189,142,170,134,250,158,118,218,
129,40,170,84,132,193,25,206,52,234,65,19,190,175,47,160,139,158,23,104,
251,109,236,74,182,174,11,201,233,110,86,169,165,204,181,101,153,122,168,41,
121,145,89,167,78,199,59,126,23,177,119,169,101,4,160,98,58,31,76,93,
36,82,97,22,125,207,201,217,47,133,196,233,42,233,8,214,233,178,221,64,
218,40,12,243,25,108,231,48,37,13,242,200,131,77,80,152,242,32,43,61,
89,58,77,89,41,141,209,125,169,186,215,48,216,228,80,206,60,40,207,35,
5,42,30,221,128,158,208,23,197,38,46,123,109,150,3,152,80,181,166,84,
136,197,88,193,43,67,242,157,119,207,165,51,156,14,76,28,185,171,236,232,
9,35,248,13,135,221,249,47,236,63,65,124,233,209,51,231,128,111,174,172,
118,120,113,3,98,109,204,17,112,133,114,97,166,234,150,149,7,80,163,246,
60,140,250,215,13,254,93,181,154,1,162,224,108,54,246,44,1,21,99,74,
11,246,121,248,216,235,232,236,15,239,117,103,247,36,56,32,159,32,245,138,
206,235,25,215,142,165,95,147,215,194,178,96,148,34,108,125,175,132,15,104,
6,81,80,178,195,58,178,102,41,241,80,165,134,185,68,214,147,135,223,39,
119,197,96,123,57,187,46,159,141,169,101,229,23,134,21,12,191,238,30,30,
156,192,224,246,191,29,93,147,59,112,211,227,40,111,26,174,205,187,84,174,
171,219,52,191,179,12,49,108,250,108,12,191,204,193,215,185,138,209,39,69,
197,129,67,220,100,88,230,233,70,188,118,63,147,111,162,121,11,214,244,197,
249,214,243,210,242,225,233,83,142,194,222,219,118,57,204,58,91,114,107,140,
61,209,20,21,167,35,143,61,151,90,3,249,53,254,206,133,40,49,155,198,
132,145,227,128,25,76,69,152,110,233,23,41,113,252,163,130,153,6,99,206,
145,190,55,40,154,238,186,221,240,218,227,21,186,96,211,177,122,146,183,173,
180,215,81,218,68,45,169,76,241,173,255,173,122,6,190,226,10,73,113,95,
174,174,42,197,145,242,213,99,234,5,116,144,120,199,27,68,60,209,3,228,
139,188,82,143,149,91,77,143,216,109,162,53,41,56,216,200,255,23,66,157,
190,204,93,182,184,5,215,116,131,244,201,188,22,185,66,13,103,96,182,213,
78,119,122,232,14,104,4,17,14,111,241,220,208,86,185,207,168,196,13,252,
104,242,87,107,150,52,240,216,61,149,55,87,39,4,219,81,109,204,0,32,
91,113,221,119,252,137,18,28,45,14,111,226,220,181,117,36,226,64,133,55,
166,204,73,226,21,210,19,194,58,89,193,245,152,210,223,206,164,254,11,64,
99,134,102,169,246,137,179,55,38,55,13,181,245,175,214,114,60,40,36,56,
205,192,101,247,10,47,176,223,45,76,41,202,24,254,249,27,112,122,96,29,
99,206,14,103,192,83,11,188,181,17,207,39,99,92,101,96,11,10,121,61,
128,101,230,132,78,213,214,133,39,68,188,187,234,129,226,246,100,220,56,173,
12,104,12,135,155,164,31,57,137,28,158,238,138,5,174,108,189,45,185,216,
158,213,70,153,229,71,255,240,126,50,117,95,195,173,160,195,249,57,211,196,
133,243,141,6,188,43,129,160,78,237,150,99,124,95,79,204,206,151,183,131,
115,199,237,29,205,184,229,208,102,125,61,215,150,222,184,19,139,168,97,236,
161,144,56,2,9,245,36,154,246,192,32,237,233,105,30,199,19,45,14,181,
174,184,100,136,100,46,7,163,241,185,209,156,136,205,41,23,181,188,138,226,
0,145,30,85,76,42,94,153,243,198,109,220,0,215,78,75,45,195,104,43,
234,183,250,34,138,5,44,53,146,176,81,166,99,74,205,181,74,79,116,153,
187,117,144,0,114,173,166,130,66,235,87,173,249,208,76,177,97,136,148,24,
213,238,57,50,235,234,195,193,87,90,39,38,51,70,42,160,123,211,145,76,
139,145,105,51,160,214,169,96,124,166,64,116,89,154,125,185,56,194,232,108,
42,28,248,247,16,29,42,220,119,11,57,101,255,187,68,42,235,25,109,158,
126,147,9,33,27,75,167,117,61,88,210,217,62,217,122,192,130,65,121,13,
39,59,197,173,45,90,155,55,230,87,226,155,189,24,226,113,191,14,150,179,
194,163,238,242,82,126,0,217,167,183,49,142,46,244,210,27,183,99,254,208,
34,182,253,55,196,23,8,202,9,249,208,143,227,144,234,227,234,228,129,244,
21,107,85,0,149,140,158,147,209,70,167,84,52,207,102,100,209,220,243,21,
101,68,140,134,144,215,19,253,203,39,255,148,84,41,80,211,71,199,106,117,
198,166,144,207,54,207,40,87,87,65,239,114,97,2,2,102,11,34,175,71,
130,7,197,24,97,108,206,232,150,12,228,116,115,106,120,237,69,160,153,242,
125,158,126,36,45,92,0,164,108,131,124,55,222,94,74,144,45,245,178,0,
180,50,130,167,203,26,165,200,1,39,74,173,158,143,5,242,34,99,207,145,
32,62,228,114,114,167,151,49,28,54,53,3,59,214,42,149,81,145,136,112,
16,143,17,236,200,132,81,42,56,113,208,107,102,218,133,160,20,142,106,42,
135,141,114,87,166,66,150,124,161,246,153,7,155,167,133,48,61,37,244,213,
142,25,121,204,209,140,35,134,97,151,135,198,58,80,252,51,213,234,56,235,
231,16,1,74,206,79,114,182,244,129,151,20,230,168,139,156,201,236,35,138,
54,212,235,91,246,163,44,62,141,113,179,62,102,226,236,39,93,243,33,27,
24,24,182,60,38,54,175,52,9,251,35,214,56,166,208,50,240,41,76,220,
246,65,11,164,242,151,175,223,250,22,137,113,136,163,96,24,216,66,201,6,
34,120,83,238,78,148,179,171,80,121,210,85,27,184,45,175,118,199,249,172,
224,244,166,182,86,193,251,132,170,235,186,207,247,138,149,142,33,47,212,57,
180,105,75,60,109,217,127,179,112,254,206,179,75,41,173,241,72,98,31,207,
239,168,99,4,63,183,159,3,163,5,218,100,170,45,171,158,65,157,124,156,
112,160,13,71,253,110,192,107,90,13,2,95,29,159,11,231,7,36,145,3,
133,169,148,232,57,61,27,56,77,197,163,35,156,21,164,11,187,107,100,83,
58,242,25,173,77,127,151,116,45,50,188,62,191,195,7,54,89,16,138,34,
47,70,59,231,47,73,205,194,206,140,228,207,203,203,221,1,190,247,39,35,
230,98,156,126,12,57,53,13,118,169,135,148,230,63,165,19,246,119,238,182,
131,243,75,1,163,146,207,54,83,180,6,62,57,142,50,46,107,94,87,163,
241,239,56,217,87,134,76,7,209,78,240,223,171,113,190,169,140,255,58,138,
16,239,2,133,129,105,65,148,159,61,125,205,159,218,107,0,201,185,105,151,
56,89,45,213,28,150,68,69,6,222,81,154,160,144,159,151,238,93,36,221,
176,233,186,243,72,106,22,188,105,239,34,98,179,191,79,140,46,201,92,37,
196,46,144,199,210,224,180,158,5,175,58,79,104,227,95,37,41,116,202,127,
199,233,199,232,97,86,184,181,62,121,227,189,43,26,146,145,23,199,103,153,
28,241,32,170,215,141,229,130,115,60,232,61,87,225,44,3,114,251,72,64,
46,87,36,177,214,178,197,252,6,155,152,172,223,207,50,190,208,178,135,86,
201,224,153,13,242,220,101,155,173,69,172,47,227,162,38,81,20,136,162,178,
217,132,43,214,206,36,15,191,106,23,185,160,198,146,225,155,82,154,100,135,
235,130,116,121,198,135,134,60,104,8,81,89,237,109,204,111,188,93,24,177,
127,32,230,145,117,162,68,137,153,6,59,196,154,6,172,14,68,137,109,117,
8,180,235,146,70,129,16,255,81,51,43,151,48,135,55,103,215,88,221,188,
203,70,4,77,59,200,176,144,78,255,123,209,96,31,196,47,8,60,23,235,
137,175,5,179,95,29,71,100,97,162,221,68,79,80,182,69,227,81,117,113,
218,162,181,233,140,197,85,98,255,13,13,210,52,132,24,64,51,162,248,47,
123,137,204,147,114,17,94,56,190,254,128,104,96,42,195,193,225,170,208,46,
24,138,49,99,116,177,188,141,152,166,232,174,2,129,8,201,227,41,136,177,
136,137,73,55,93,246,26,54,100,207,101,227,230,38,67,212,65,124,7,67,
188,129,35,146,198,126,88,58,56,51,216,158,18,235,191,176,211,205,226,224,
81,113,191,33,30,143,114,67,232,180,182,227,147,85,22,53,13,230,149,163,
104,153,16,113,195,136,42,217,199,170,156,141,150,31,79,229,27,130,63,153,
136,77,239,98,85,35,236,17,14,66,185,56,80,3,13,41,20,179,166,188,
194,150,240,131,85,156,91,253,91,68,225,199,148,64,200,173,251,239,200,7,
119,208,211,85,46,75,113,37,19,116,235,75,81,151,37,234,102,143,248,164,
255,159,28,152,84,199,219,156,197,248,148,234,232,219,191,175,41,7,15,189,
225,173,39,40,133,170,27,64,210,8,82,62,79,117,169,141,99,224,88,169,
182,247,73,88,118,230,145,183,199,161,67,112,52,137,21,200,116,211,216,123,
89,211,245,185,52,219,137,207,50,38,79,23,22,120,244,155,41,164,20,90,
116,2,209,193,214,51,157,201,182,54,251,160,237,150,4,222,189,207,244,106,
132,245,46,4,239,58,219,122,126,197,217,99,2,198,242,149,36,239,160,148,
232,70,162,196,53,203,116,116,155,120,182,185,240,227,183,237,145,171,126,36,
229,145,169,153,36,7,178,76,143,110,204,172,44,1,161,79,11,122,209,98,
164,243,39,47,99,134,207,210,15,100,98,34,67,82,91,4,241,182,185,170,
30,134,129,49,167,57,11,249,254,209,30,209,83,183,32,81,155,135,250,4,
192,193,210,16,114,139,96,6,103,133,45,10,235,40,60,20,2,248,111,99,
209,136,206,208,70,131,131,44,173,14,114,30,190,137,24,30,189,8,141,144,
230,89,69,59,161,183,7,127,234,227,82,127,250,13,238,103,191,224,72,39,
127,117,15,86,106,157,204,201,101,182,229,50,177,91,175,242,5,159,223,189,
145,193,182,213,36,141,248,127,36,51,41,172,78,79,136,151,230,190,61,34,
30,76,128,213,113,138,250,161,106,70,21,191,42,254,202,165,173,192,246,250,
128,88,72,206,42,191,180,91,153,101,26,202,146,199,189,156,177,230,139,28,
59,78,21,232,112,76,14,81,41,148,214,28,255,217,132,173,117,30,218,57,
175,162,208,100,221,182,105,219,99,42,224,121,117,30,38,141,32,81,120,233,
221,150,36,138,117,172,76,22,104,243,51,144,151,21,86,164,15,83,136,252,
89,17,28,60,41,197,249,211,122,95,124,213,68,62,145,88,216,128,25,146,
142,55,53,111,131,240,73,23,173,106,221,253,205,49,45,224,255,36,45,42,
196,69,247,101,142,248,235,16,194,164,246,223,71,238,59,40,235,12,163,2,
49,28,118,107,217,100,253,162,174,115,14,194,199,41,90,234,28,15,126,13,
240,114,178,150,71,11,177,125,10,16,92,6,133,96,191,203,0,191,122,117,
133,8,69,185,80,117,164,71,5,89,239,82,197,83,157,132,20,169,206,119,
96,159,207,8,140,101,243,18,164,24,118,207,230,122,52,166,176,210,254,86,
149,189,30,221,200,77,248,58,139,143,134,78,46,165,182,232,154,184,231,3,
141,38,154,79,197,16,53,74,61,57,9,89,201,134,152,92,33,38,117,21,
91,10,67,174,253,164,250,193,246,64,134,91,104,34,253,220,45,125,251,15,
207,9,46,155,211,131,148,140,32,17,106,248,136,15,124,218,23,32,206,37,
95,10,123,67,69,3,15,77,187,238,201,206,68,59,140,4,156,251,165,156,
183,242,154,242,234,181,90,214,12,10,189,130,132,223,224,207,25,70,230,102,
33,110,68,4,252,150,74,160,61,111,135,164,251,46,186,233,171,251,228,200,
47,77,167,29,139,180,246,58,58,70,45,123,164,140,2,88,93,5,102,99,
133,44,172,187,166,10,3,123,205,220,107,71,23,95,215,104,139,225,39,41,
230,37,50,174,159,98,56,197,80,234,76,92,119,176,129,25,152,155,143,67,
162,185,53,14,31,229,166,58,17,45,241,126,188,70,219,127,254,221,16,56,
194,145,217,50,200,217,138,150,82,73,76,214,82,13,159,244,229,104,99,97,
159,166,108,57,64,82,130,19,196,96,147,197,36,172,125,95,101,235,190,1,
121,221,170,191,88,116,43,151,206,28,101,86,40,81,142,73,92,210,247,55,
133,175,46,230,236,218,176,200,235,94,214,0,89,36,119,25,5,3,65,71,
129,176,137,94,150,157,91,169,218,89,49,54,236,47,67,68,18,77,244,133,
45,135,111,157,95,29,111,91,252,235,135,77,104,53,133,58,69,181,167,193,
235,60,100,251,55,119,70,193,148,107,253,95,178,2,53,52,158,187,128,71,
180,118,40,113,50,19,187,165,133,148,30,190,163,217,142,73,182,40,90,77,
242,149,217,69,53,254,111,54,75,54,207,10,250,69,97,3,84,12,145,70,
27,245,168,156,122,112,178,55,79,36,112,14,178,238,28,87,35,71,176,17,
65,233,225,238,108,238,47,100,131,82,110,95,192,8,115,156,204,140,63,113,
253,4,86,29,221,55,110,83,32,46,116,156,126,197,158,64,254,220,5,18,
59,171,216,131,161,3,32,48,90,253,118,82,76,239,65,208,128,191,1,56,
130,57,250,153,164,81,242,100,121,141,195,219,59,164,97,209,221,118,244,189,
199,92,193,53,223,175,186,35,44,92,213,147,212,167,166,66,121,58,71,109,
247,16,116,185,7,216,85,176,11,123,1,72,28,42,63,4,235,41,245,83,
119,121,191,163,85,194,166,65,103,115,47,224,105,228,130,37,101,66,96,236,
177,170,154,141,69,113,19,98,185,21,1,34,121,52,163,151,119,255,187,67,
253,230,224,212,17,23,102,141,224,164,147,9,206,236,160,86,146,3,43,157,
40,15,95,145,80,136,91,122,96,245,88,6,108,183,103,242,8,193,246,149,
73,251,139,22,81,15,108,96,55,64,130,219,40,244,217,35,156,138,47,22,
108,28,122,209,10,15,176,93,185,201,241,124,48,0,154,224,159,49,93,211,
204,108,43,228,64,147,189,186,3,184,225,215,169,97,228,105,211,128,201,35,
100,254,90,214,111,193,42,91,17,255,99,63,205,157,151,68,8,170,196,77,
174,80,172,34,89,137,179,212,227,248,5,56,156,120,188,65,160,68,221,63,
115,185,0,221,27,47,228,129,176,51,88,153,203,196,188,191,116,97,98,184,
253,60,214,175,202,84,124,120,162,59,248,104,135,19,141,55,121,204,46,124,
120,7,250,190,9,49,0,20,35,196,182,194,7,253,133,128,167,184,194,67,
24,201,49,44,128,219,213,116,16,10,50,40,54,199,244,147,31,235,82,143,
70,106,59,62,140,115,57,165,198,41,170,125,233,84,251,7,135,117,79,37,
235,140,172,73,211,29,171,3,69,30,101,88,239,141,49,237,56,150,206,61,
8,52,180,62,193,112,195,73,58,38,111,231,124,195,84,231,206,77,32,124,
184,119,230,144,229,92,36,83,96,214,131,233,37,96,188,189,143,204,223,239,
40,45,243,47,21,46,91,199,183,15,148,212,59,227,202,173,34,59,136,209,
120,113,134,90,42,122,227,53,5,59,17,238,86,175,35,56,112,55,189,97,
181,192,75,127,145,87,186,71,85,213,15,95,154,81,202,225,245,39,45,91,
28,198,211,39,189,113,86,106,40,157,234,91,1,225,226,32,4,179,253,119,
97,3,161,44,6,126,205,124,187,207,201,131,141,211,236,231,201,99,63,164,
61,104,127,207,105,226,188,216,225,167,122,78,220,122,19,62,156,27,41,193,
131,206,70,177,88,89,233,88,219,249,215,77,148,117,20,84,206,70,114,159,
250,184,144,45,145,81,35,216,99,253,17,220,169,254,30,18,65,34,126,134,
200,87,231,146,117,142,104,2,166,14,83,33,34,70,233,224,255,79,65,168,
6,197,42,190,92,142,101,105,78,34,252,187,89,75,117,4,11,17,100,109,
122,119,88,100,180,168,140,20,215,19,43,182,82,147,73,118,31,38,133,7,
74,219,74,168,201,22,178,134,232,40,185,219,105,10,32,90,13,96,206,105,
129,2,117,130,186,72,19,176,76,95,77,164,70,209,26,140,74,11,29,183,
126,151,34,227,164,250,201,55,13,78,226,199,152,11,112,48,211,85,142,69,
140,138,200,119,18,15,66,219,128,243,243,229,166,12,131,228,240,211,212,14,
155,3,45,174,106,59,21,61,216,27,15,213,96,198,147,100,200,186,116,38,
4,78,53,85,29,15,103,206,39,121,80,171,30,29,161,62,121,29,225,15,
39,221,31,87,156,101,179,227,66,186,203,214,226,87,191,174,2,117,171,249,
183,114,2,45,4,175,187,110,252,238,200,165,193,61,70,194,230,165,29,167,
159,103,203,64,27,231,85,138,90,108,74,234,33,141,85,42,62,194,241,77,
94,161,179,177,206,83,200,228,59,182,117,149,194,85,220,216,36,21,153,107,
140,19,145,60,123,199,46,109,194,224,160,152,190,172,32,209,23,72,211,190,
107,13,177,214,211,36,104,223,101,185,54,215,230,161,63,13,239,145,1,131,
8,178,212,222,110,178,230,222,138,134,165,209,152,16,161,38,188,102,12,175,
188,179,224,253,22,32,86,185,58,92,189,106,142,167,115,94,117,239,51,1,
186,126,158,10,187,9,155,135,172,147,149,243,247,6,210,2,177,176,143,232,
46,116,110,164,84,185,164,80,13,127,58,203,93,244,85,43,31,110,184,188,
152,14,180,116,93,195,236,18,175,104,206,115,48,52,172,199,97,50,128,210,
37,109,50,174,204,223,28,210,228,116,105,168,181,57,157,203,38,193,186,88,
237,183,249,222,186,129,46,143,60,141,93,193,223,152,155,0,134,222,137,144,
125,253,83,201,0,155,10,79,254,42,219,88,170,97,17,204,218,155,36,249,
115,96,80,219,19,103,233,21,173,51,243,207,50,198,184,148,182,16,73,189,
134,216,166,105,10,5,119,3,177,57,39,181,24,91,166,52,203,68,2,60,
135,88,248,157,159,242,216,90,220,21,74,176,211,120,21,200,150,53,176,107,
246,248,223,153,62,81,120,155,197,249,60,247,254,28,125,221,51,226,21,183,
184,22,233,179,237,140,45,67,186,35,35,145,113,28,192,69,129,88,160,210,
244,202,197,128,33,88,184,194,178,86,197,74,85,213,214,234,82,50,137,150,
70,213,143,44,128,154,96,95,123,244,166,165,255,108,149,94,161,40,56,243,
180,234,243,166,4,222,220,138,112,189,185,83,238,237,71,109,149,123,101,35,
80,83,121,183,193,198,99,231,85,197,253,28,36,216,143,214,214,11,107,29,
46,36,148,169,202,7,103,170,181,136,254,14,35,154,250,149,199,131,64,168,
182,221,18,90,193,14,182,239,34,29,161,93,100,56,176,111,214,155,141,132,
250,73,95,127,158,65,194,12,213,118,187,236,99,138,58,64,160,154,27,112,
5,88,70,193,94,178,164,155,115,122,224,111,19,85,200,15,111,130,153,233,
98,204,198,29,159,205,159,14,168,90,205,237,221,62,97,54,93,11,202,172,
228,211,78,20,191,235,251,88,197,209,137,101,23,13,189,70,206,163,163,5,
20,7,192,210,206,84,97,99,22,40,142,170,210,208,96,240,85,234,55,118,
215,109,142,45,83,240,52,211,252,163,44,151,245,135,234,110,61,242,12,196,
49,211,162,8,201,186,16,49,64,6,15,93,93,250,58,150,170,254,140,131,
85,48,26,200,174,155,228,169,87,41,165,81,203,7,145,35,185,180,112,191,
123,92,187,166,21,45,233,221,97,4,89,169,174,54,189,205,118,205,67,2,
139,186,241,0,244,11,123,15,117,3,31,27,25,80,196,226,63,138,63,129,
244,83,27,248,251,128,120,172,217,187,48,86,12,25,39,69,50,91,23,34,
55,230,202,182,191,184,17,236,34,49,35,142,145,216,243,153,215,149,234,94,
56,175,238,37,80,127,216,242,253,96,46,248,26,255,75,50,40,97,198,2,
133,184,102,145,154,248,46,195,255,40,67,215,68,128,79,158,147,19,104,82,
64,3,37,182,159,75,14,252,160,213,123,158,54,27,200,51,39,72,222,178,
215,27,166,254,135,206,77,190,85,28,167,237,222,252,93,234,41,173,212,153,
138,130,185,5,135,180,15,219,130,11,229,233,227,13,190,176,219,134,71,88,
216,68,152,168,43,8,124,199,129,1,20,23,219,34,193,184,203,76,98,172,
169,137,34,101,79,125,224,147,240,185,146,132,163,241,133,1,111,217,206,99,
82,203,104,221,156,126,10,167,222,53,24,29,207,46,164,210,104,119,101,152,
203,194,102,88,1,165,222,232,103,233,116,74,174,106,233,137,107,121,8,248,
155,119,171,215,219,126,9,13,33,217,20,220,65,189,83,89,131,115,137,125,
196,15,252,241,135,229,86,40,250,112,17,233,99,12,143,26,231,215,131,163,
143,31,203,168,128,76,194,50,122,136,164,30,169,237,138,155,55,64,110,155,
143,235,132,227,156,45,1,223,194,4,28,216,109,200,183,71,135,177,53,168,
126,186,223,175,49,40,221,180,249,101,220,223,131,150,136,119,48,176,42,6,
111,159,39,73,153,66,215,108,169,49,74,156,234,47,229,161,230,114,156,22,
109,161,150,69,195,148,246,88,10,113,29,131,164,67,24,110,149,110,138,16,
15,205,169,73,93,19,130,76,75,106,224,95,24,165,153,177,82,29,87,213,
157,209,131,248,76,145,14,43,7,175,109,167,50,69,113,120,58,88,129,108,
84,62,223,62,225,35,81,120,197,105,255,122,92,68,19,137,5,255,218,1,
57,137,209,202,100,115,191,143,41,143,106,35,233,44,25,174,150,249,41,103,
197,244,175,210,67,233,19,170,163,124,86,210,153,213,118,142,72,239,104,224,
148,202,150,171,103,204,136,12,101,227,16,34,145,8,76,30,77,58,143,159,
171,229,60,175,58,128,112,242,86,5,10,107,43,147,77,15,30,38,162,126,
99,200,223,15,121,157,132,8,251,199,247,233,217,67,243,7,82,217,76,26,
89,253,240,176,96,236,219,149,212,160,42,53,9,146,251,174,100,136,144,18,
212,5,92,85,154,225,227,74,186,117,232,52,240,176,154,212,236,104,215,69,
64,187,51,14,177,148,164,81,75,249,75,86,223,38,118,138,147,44,90,47,
113,159,140,74,16,114,187,107,72,79,255,207,144,150,194,131,29,136,187,239,
188,73,89,228,42,10,43,250,24,104,8,9,26,86,59,121,128,65,14,234,
53,206,109,114,228,80,238,2,241,15,253,241,88,27,29,159,71,55,74,188,
181,47,161,226,121,223,74,129,91,85,100,121,52,65,11,232,208,47,127,149,
52,212,245,152,84,198,175,244,202,234,160,130,169,201,46,160,249,231,178,230,
146,239,174,104,15,133,117,68,222,154,88,63,211,41,49,232,252,23,30,67,
204,50,178,17,102,73,18,21,41,51,173,85,104,132,253,24,78,92,205,176,
10,230,55,144,30,75,100,204,44,97,147,3,107,27,166,200,19,130,212,204,
58,220,139,107,244,48,170,116,195,227,27,90,68,236,145,177,73,32,152,137,
213,212,70,18,71,235,65,162,10,201,50,65,131,38,231,126,162,129,46,138,
255,22,66,134,241,121,153,167,236,151,147,92,126,54,70,138,7,112,251,192,
90,136,17,91,254,221,132,132,178,136,90,217,218,100,164,176,107,135,184,147,
132,143,8,161,192,216,119,181,210,90,121,8,70,161,62,103,200,71,155,184,
184,68,232,62,239,83,4,196,124,67,6,134,240,75,69,188,201,235,109,130,
215,172,18,127,195,158,45,27,164,162,81,70,26,87,165,47,29,55,58,3,
231,237,131,210,244,129,108,130,218,27,229,202,197,51,31,50,254,183,23,225,
121,55,160,193,149,10,173,33,7,242,192,246,223,129,42,238,185,238,117,202,
201,127,8,119,83,22,43,32,212,162,41,102,207,249,241,233,185,169,108,151,
149,205,69,193,142,48,19,143,75,128,121,107,128,215,212,50,185,112,95,60,
89,54,169,80,87,184,41,214,104,37,108,61,113,92,174,145,144,171,68,42,
26,14,7,236,124,26,53,252,53,1,178,246,82,221,60,23,96,221,236,92,
91,11,21,241,139,111,70,133,117,63,239,240,122,161,140,194,79,86,178,73,
136,228,173,212,186,216,190,45,98,191,85,70,157,204,241,83,150,26,8,49,
66,190,33,30,35,78,13,36,30,221,208,234,118,98,231,142,65,82,70,31,
119,129,111,150,14,84,31,196,136,200,47,53,240,57,65,189,177,154,170,4,
35,196,116,12,74,202,108,215,200,62,80,184,221,131,29,10,225,236,234,47,
30,96,142,178,236,142,205,16,37,121,194,27,44,178,231,252,79,95,198,101,
230,16,50,23,117,100,80,178,30,121,214,63,85,120,75,53,150,190,60,104,
98,207,163,115,26,254,89,100,88,85,87,37,102,59,64,84,71,143,170,115,
33,248,124,191,242,156,9,173,194,25,247,130,177,143,27,75,99,29,249,167,
57,221,49,107,199,131,82,118,252,94,246,18,25,93,17,3,252,162,158,86,
58,59,190,149,61,97,92,213,145,98,245,22,75,65,176,232,187,36,144,147,
98,205,15,97,138,181,113,68,60,13,210,15,57,210,8,167,152,216,2,179,
193,11,17,82,236,17,101,168,168,192,173,81,236,179,35,11,203,159,8,152,
196,128,211,105,241,60,29,62,52,64,56,213,37,161,146,23,253,97,52,195,
42,36,7,116,48,156,102,142,137,17,247,38,101,73,91,243,6,243,244,79,
235,240,53,218,130,163,180,62,98,19,168,163,143,216,62,201,103,32,165,208,
66,110,64,209,55,238,166,159,18,192,50,236,120,58,171,216,179,138,236,54,
134,51,209,157,89,134,77,149,240,219,79,233,203,237,242,55,21,214,195,227,
31,206,181,107,252,219,199,253,36,20,163,208,212,103,72,90,192,39,43,136,
205,235,228,184,203,82,134,116,30,252,217,31,48,128,147,201,122,12,237,87,
87,225,55,110,63,106,31,19,45,11,124,108,36,255,216,6,61,241,234,111,
54,180,104,46,184,28,130,94,90,19,71,166,99,102,106,253,187,149,213,233,
192,165,235,252,191,247,97,0,242,4,3,225,130,127,167,127,32,72,254,109,
234,112,209,11,112,40,130,66,193,130,161,173,204,53,31,186,141,26,197,28,
13,88,128,119,240,240,124,251,70,79,181,211,216,150,135,18,60,76,208,15,
207,179,161,65,85,53,106,46,31,208,10,158,133,57,96,157,173,161,189,0,
249,65,254,166,185,48,196,129,153,116,100,253,230,81,198,114,153,156,174,199,
43,245,57,31,166,195,127,134,172,53,165,60,126,221,107,217,134,252,16,41,
236,240,14,22,10,249,133,117,132,244,18,83,13,187,124,227,144,114,2,251,
38,112,187,193,14,71,193,172,26,51,233,230,176,59,10,184,198,148,175,115,
58,57,120,49,65,24,209,227,183,10,133,102,20,88,151,185,85,150,211,91,
181,128,48,225,241,200,229,152,165,76,235,138,145,140,217,142,234,200,38,235,
97,207,86,59,183,108,50,73,245,47,34,121,124,141,96,27,210,36,140,117,
186,128,188,92,148,184,255,65,79,223,12,107,43,9,51,166,17,234,189,195,
1,240,47,85,246,21,175,84,7,98,126,120,25,214,22,217,1,130,50,125,
88,228,80,21,133,220,52,228,105,29,44,20,130,36,231,53,144,147,174,94,
91,216,158,201,91,83,216,60,204,202,209,35,21,136,49,177,49,112,255,73,
203,201,223,89,246,87,146,71,26,117,43,235,44,51,37,12,30,141,186,85,
154,132,0,108,55,226,6,21,200,99,84,48,134,156,51,17,203,235,51,247,
73,231,71,38,234,207,149,200,131,226,140,253,71,115,203,110,149,66,130,167,
53,150,146,135,172,177,203,196,233,130,70,213,51,45,24,80,156,108,214,225,
175,201,201,102,96,191,117,108,169,145,231,77,55,60,215,200,149,40,227,48,
37,60,48,55,213,136,65,239,90,38,186,61,74,44,217,68,170,88,213,213,
16,65,226,54,227,70,187,88,92,200,7,246,207,188,242,140,144,179,93,36,
212,199,158,186,3,212,145,18,153,40,233,158,14,204,215,131,33,26,231,52,
96,180,245,116,37,11,226,199,168,230,36,28,201,103,245,100,9,231,203,185,
218,20,19,250,8,200,217,108,42,147,246,242,197,48,133,49,221,56,108,62,
196,115,160,156,145,87,208,160,147,116,22,167,201,209,159,94,7,133,153,29,
16,95,103,172,241,118,220,38,159,221,59,48,113,237,231,47,148,97,208,164,
90,17,226,228,251,132,134,168,60,62,255,51,54,161,139,112,15,154,87,203,
137,97,63,109,159,223,42,125,209,87,11,53,26,132,178,49,182,55,138,50,
118,218,70,123,212,233,186,58,143,123,216,30,170,23,95,169,34,24,9,247,
88,242,197,5,21,130,41,37,116,25,39,7,173,60,196,56,116,124,59,56,
164,207,112,2,135,40,236,181,50,127,123,36,208,253,26,143,143,123,252,95,
100,146,245,167,123,36,177,33,120,230,157,94,197,49,152,68,152,76,18,49,
235,127,207,111,242,217,233,99,83,120,39,115,233,37,109,118,158,158,166,219,
146,229,132,240,44,73,96,65,204,86,214,58,206,0,119,149,11,72,166,79,
44,4,239,162,25,37,49,124,120,5,164,187,73,158,19,148,90,253,88,178,
1,143,107,102,63,236,174,130,126,137,227,151,109,43,131,234,63,49,81,44,
143,145,197,81,123,34,124,11,145,186,22,78,141,220,233,109,5,73,62,178,
64,206,180,191,106,135,85,173,89,142,39,186,13,122,12,50,213,71,104,117,
88,198,140,35,184,192,174,37,204,226,207,219,91,243,60,20,253,90,116,83,
154,69,191,205,64,165,218,84,93,206,54,56,251,163,173,49,63,33,243,203,
166,130,168,24,107,145,7,27,2,191,124,166,233,23,236,176,27,233,3,92,
233,214,70,96,9,137,3,152,211,226,95,24,134,183,187,118,36,91,5,180,
218,222,245,36,97,64,126,139,180,219,150,3,165,169,203,70,212,225,50,225,
152,83,171,94,196,46,97,81,202,203,69,98,236,68,39,170,207,6,60,232,
196,51,191,7,145,204,226,203,244,229,152,84,166,101,137,174,156,156,44,173,
183,37,200,183,32,55,188,184,55,34,139,135,42,185,99,211,1,106,230,75,
196,60,120,240,140,185,120,26,174,52,170,66,216,192,253,81,98,35,198,110,
80,235,243,119,104,197,97,93,27,7,54,189,228,177,101,170,200,120,54,54,
127,178,1,218,48,169,215,45,37,28,240,169,3,95,232,135,37,84,136,180,
92,138,239,16,181,249,230,215,80,0,227,108,247,241,193,23,85,141,121,91,
221,100,245,42,239,240,120,103,169,163,180,220,20,146,82,6,224,133,117,45,
12,91,33,6,226,23,87,225,238,252,235,66,132,14,173,151,232,45,225,59,
100,101,178,201,229,26,200,29,208,105,87,150,89,140,187,144,111,74,237,13,
59,247,103,188,22,164,60,19,116,46,22,250,103,126,193,118,72,118,200,61,
51,79,0,68,135,170,149,240,180,249,193,46,141,201,21,56,20,231,67,196,
77,217,192,152,233,87,227,83,8,145,25,233,125,122,236,183,92,201,249,124,
39,184,37,216,201,61,89,18,5,156,19,9,226,245,77,13,195,191,81,132,
196,137,31,155,100,223,39,55,144,180,134,115,38,163,176,250,233,24,5,251,
241,102,65,74,213,14,254,18,245,88,193,179,113,151,57,252,101,69,243,10,
79,122,75,131,113,91,107,138,123,233,15,7,228,183,42,84,126,36,31,238,
31,156,81,154,214,63,101,37,62,124,57,46,186,197,217,90,170,141,238,231,
32,38,164,157,113,199,56,224,102,47,218,184,8,104,76,161,15,222,161,23,
114,160,198,139,102,9,89,243,220,10,187,61,14,156,165,242,44,163,247,126,
205,114,62,74,27,34,23,125,11,121,206,224,200,111,115,189,219,121,228,201,
241,112,76,74,143,45,6,42,47,74,82,100,38,159,116,115,229,102,247,250,
14,234,251,164,204,173,182,80,22,216,189,87,59,99,168,221,128,224,131,144,
150,217,133,175,149,196,67,34,153,74,141,179,48,83,109,232,77,152,78,241,
7,12,31,225,236,82,108,167,211,60,170,143,3,201,157,168,120,21,82,243,
140,41,37,205,219,229,192,3,221,107,244,126,20,143,180,33,157,215,155,208,
13,251,48,36,26,55,139,21,219,120,203,225,184,8,67,123,80,249,250,160,
84,248,75,255,148,166,10,117,203,151,177,66,200,2,18,167,6,70,41,57,
2,237,87,13,61,134,9,115,35,113,109,125,78,69,129,145,85,110,119,216,
85,193,180,107,50,185,240,170,243,135,192,70,227,185,139,2,220,89,94,30,
187,115,181,113,168,70,70,5,23,179,75,139,0,18,85,197,141,159,172,136,
145,123,219,20,169,115,59,141,122,101,238,241,211,112,73,238,7,161,34,123,
15,157,84,33,243,111,79,99,173,65,57,247,152,24,126,162,51,205,93,223,
163,85,115,236,252,119,81,176,81,126,71,128,101,42,248,146,59,18,157,83,
125,116,21,180,62,108,18,146,146,58,101,194,5,210,220,239,25,223,195,111,
49,114,89,108,182,121,118,53,72,57,47,169,122,228,251,210,194,69,156,21,
142,99,59,156,240,61,63,87,225,56,0,173,151,110,226,99,146,228,25,141,
110,119,57,160,54,244,166,196,229,242,5,232,34,102,72,76,221,8,170,230,
96,155,98,145,54,200,93,70,255,233,95,154,101,137,76,105,214,234,193,133,
108,12,152,215,252,232,47,72,228,142,71,244,118,54,137,11,5,75,16,251,
244,232,100,154,202,190,195,206,149,114,97,176,160,82,238,21,254,253,45,235,
68,137,104,116,86,58,70,237,191,94,30,4,223,170,28,50,156,242,70,22,
63,103,157,91,205,153,251,249,192,212,61,158,223,14,93,100,9,14,120,214,
99,59,146,251,32,190,33,163,191,19,99,54,182,244,37,206,198,198,238,32,
11,61,116,90,187,36,61,234,233,213,65,37,180,45,68,162,139,160,37,248,
124,61,123,182,113,5,238,9,95,219,10,227,95,249,55,10,130,222,2,98,
38,74,94,249,185,235,214,116,234,185,75,14,255,95,148,85,248,0,69,32,
242,18,196,225,110,225,65,121,3,15,152,122,68,221,134,149,62,249,57,79,
121,38,249,255,216,120,189,226,105,218,249,14,219,14,180,12,159,212,142,214,
175,136,185,119,155,50,41,15,82,28,100,131,104,81,227,188,123,91,22,136,
246,110,97,160,252,18,55,219,140,124,173,70,28,238,209,167,214,228,228,73,
199,225,55,236,93,95,103,138,192,9,183,39,101,52,90,105,58,82,196,160,
132,223,17,168,134,18,46,31,117,156,139,177,182,49,196,241,239,104,116,190,
99,156,249,79,143,55,167,137,253,74,83,210,10,195,88,118,73,234,44,212,
75,118,157,2,248,243,82,40,44,133,146,70,133,187,232,186,225,106,60,68,
180,51,96,203,83,222,164,172,104,11,77,74,0,186,123,182,173,196,247,47,
20,164,208,115,41,167,212,66,222,68,86,222,79,119,97,33,204,220,127,162,
9,190,57,20,143,224,203,85,185,184,144,190,27,57,163,19,184,207,80,180,
154,174,118,117,195,65,192,220,147,48,233,33,247,156,57,151,201,234,196,8,
66,50,107,74,171,181,253,20,126,254,27,236,65,66,161,165,138,28,166,254,
249,180,124,96,31,198,160,164,209,7,97,58,52,197,254,159,160,211,48,216,
42,14,181,61,142,217,112,234,32,155,49,147,6,33,219,24,19,155,40,176,
159,139,173,8,189,43,112,201,202,175,87,207,82,51,158,53,84,108,224,158,
135,23,228,47,245,73,190,188,138,17,79,164,125,53,179,137,209,74,206,18,
110,180,93,68,237,212,144,104,249,62,225,96,196,126,90,38,179,53,99,155,
222,147,31,152,140,198,176,161,167,70,59,162,198,83,231,240,215,244,35,39,
246,96,24,103,96,45,163,227,100,253,51,227,140,113,7,244,64,232,161,68,
57,167,115,15,124,146,167,147,80,40,167,155,88,123,93,8,231,219,194,236,
223,127,219,152,184,223,151,229,224,98,76,130,200,140,101,162,51,98,236,213,
125,32,52,14,66,239,212,77,108,155,58,169,45,228,44,249,166,137,87,92,
7,164,77,169,87,244,201,100,254,203,107,163,230,194,56,201,105,68,191,233,
3,226,160,180,13,236,136,62,66,177,5,44,38,149,226,34,43,12,242,254,
231,234,155,141,246,209,251,94,150,231,87,86,70,167,159,192,115,22,171,109,
153,223,240,90,255,193,99,102,81,152,58,108,106,182,31,243,127,37,222,222,
40,57,93,49,209,144,233,40,5,146,8,161,94,37,67,21,43,207,175,136,
24,103,215,239,247,156,18,107,51,115,90,223,143,235,27,34,198,46,248,58,
157,255,42,69,102,235,101,56,150,64,254,120,146,213,232,86,115,238,60,99,
44,167,5,32,210,177,23,185,74,72,165,219,202,4,177,219,44,83,223,235,
254,143,212,241,24,100,13,129,183,22,123,247,100,204,17,237,10,62,171,193,
6,56,241,164,78,174,222,37,78,39,75,71,119,147,23,130,195,90,225,92,
16,168,225,199,62,133,21,92,229,143,57,111,167,88,136,206,161,162,231,10,
13,92,81,151,233,51,115,215,244,125,30,2,189,53,104,250,252,19,26,240,
36,147,202,168,94,129,217,51,109,36,93,41,209,31,188,109,144,115,146,160,
204,210,77,87,117,254,36,164,70,243,49,49,29,14,45,119,96,146,207,146,
16,229,105,198,163,123,15,75,124,196,225,242,181,115,61,189,222,102,99,141,
169,254,25,74,57,224,247,66,103,17,128,174,29,167,197,184,178,131,68,90,
15,175,213,28,215,116,172,142,23,68,31,163,21,43,167,204,119,144,4,33,
47,214,96,89,219,176,138,0,207,23,138,105,130,200,239,50,163,216,222,222,
47,246,174,111,95,207,2,84,232,43,61,229,250,198,214,138,196,14,87,248,
240,51,45,5,95,249,251,114,76,148,11,198,171,82,166,163,189,124,247,217,
49,116,215,20,13,165,47,140,7,166,99,111,176,208,10,92,8,20,64,206,
73,164,214,182,4,95,60,15,76,103,208,58,12,94,87,26,49,233,88,249,
7,23,123,135,205,83,45,95,47,187,151,136,213,48,73,204,39,219,189,107,
142,94,141,145,199,223,242,78,50,176,229,201,218,111,250,228,169,144,119,96,
92,152,182,223,111,194,249,187,243,155,214,251,228,85,109,204,195,15,49,134,
99,183,53,215,203,174,69,154,203,88,127,78,107,226,10,27,90,134,86,28,
190,181,187,88,24,125,17,24,246,146,222,201,25,105,207,92,217,20,90,59,
91,156,249,141,11,52,250,57,30,163,67,251,209,118,128,185,214,232,186,133,
105,91,177,221,43,249,62,192,54,72,104,177,169,26,90,91,64,178,114,179,
5,157,127,85,231,49,32,161,46,203,100,159,187,182,53,243,121,145,12,134,
200,70,160,185,166,162,136,145,225,130,10,95,159,202,127,219,178,216,6,39,
20,60,189,114,157,172,222,175,98,142,155,185,171,40,153,117,105,227,205,172,
26,147,39,173,63,217,182,148,86,102,34,253,224,145,62,250,84,173,83,72,
76,203,4,54,172,178,254,22,171,204,89,227,236,173,233,200,123,97,119,94,
236,25,199,237,207,73,235,177,59,144,85,253,31,255,61,46,208,184,110,123,
75,127,5,55,168,226,208,27,175,139,228,247,1,129,240,202,128,128,110,147,
62,226,212,183,202,40,32,11,203,80,176,128,204,205,50,118,120,59,90,240,
123,196,162,72,20,82,169,175,119,250,162,171,95,132,19,219,189,11,31,54,
138,212,174,244,210,76,235,59,214,195,12,158,65,129,58,212,27,23,164,3,
157,188,194,249,52,154,235,164,110,188,195,175,170,180,226,71,169,243,160,33,
19,223,176,190,168,20,95,216,254,167,78,232,190,52,193,78,103,200,149,157,
212,60,60,97,254,26,18,148,190,76,50,127,209,238,171,105,28,147,139,104,
27,117,234,149,9,242,145,113,53,195,136,169,239,40,146,240,12,93,147,28,
35,54,20,72,137,73,186,87,75,199,167,245,193,161,115,182,148,237,93,227,
240,44,76,73,62,115,90,127,145,62,123,40,15,50,195,206,7,129,129,30,
169,54,167,20,181,238,96,251,214,98,233,60,125,196,88,116,71,49,240,35,
249,3,97,250,92,71,222,121,233,248,180,104,237,53,84,3,176,116,134,2,
43,56,172,68,215,227,95,69,18,120,140,29,231,84,162,180,8,114,141,192,
35,205,198,44,146,13,185,94,222,46,165,29,84,247,94,139,138,78,148,95,
174,72,205,187,179,238,80,44,180,163,21,22,125,8,95,105,87,46,217,186,
96,85,113,183,244,85,254,146,56,80,206,141,171,140,125,178,231,38,52,8,
40,84,188,198,19,43,19,220,191,117,172,79,203,135,25,224,20,78,135,66,
24,43,165,157,159,34,176,26,194,61,136,12,205,161,92,42,212,0,24,124,
146,130,142,187,167,199,152,2,159,198,237,174,114,214,215,225,162,250,127,178,
181,128,101,31,49,2,80,251,5,200,231,63,90,25,148,239,242,66,93,227,
231,203,15,16,36,13,159,24,209,66,7,5,232,60,249,100,135,130,140,18,
187,167,22,218,231,152,120,182,154,238,13,208,30,88,167,14,32,172,194,171,
206,163,95,4,182,129,250,205,36,152,26,68,100,118,207,166,204,126,21,235,
6,241,120,87,222,171,124,118,235,96,140,97,62,141,189,71,44,179,4,150,
3,129,68,153,63,208,178,248,223,251,149,95,142,220,244,247,162,54,91,190,
32,168,241,158,74,146,248,143,142,236,193,122,66,52,33,176,223,125,18,81,
189,152,216,170,254,185,190,241,74,15,139,197,235,27,143,76,31,214,18,109,
211,50,15,232,163,226,92,154,172,42,195,212,67,234,176,141,24,227,30,210,
155,252,208,156,143,18,79,73,110,136,145,223,36,119,132,240,12,7,97,47,
97,107,254,123,22,86,251,101,14,173,94,91,189,13,55,47,225,140,213,22,
236,113,184,152,97,105,10,173,7,7,62,104,143,20,15,17,28,231,180,49,
12,227,216,36,187,194,31,37,202,116,11,21,211,144,250,12,156,26,104,137,
67,99,248,5,25,225,193,14,1,50,137,248,172,16,175,173,6,197,101,106,
200,43,99,51,96,197,49,228,155,111,242,22,17,120,27,117,182,104,212,212,
179,73,136,14,127,156,237,163,243,47,138,86,109,105,176,119,83,142,111,115,
90,99,199,57,231,205,179,155,115,102,220,117,231,195,246,134,139,178,40,209,
56,105,51,148,223,105,173,27,114,213,120,212,135,25,63,232,225,249,18,1,
46,79,97,151,146,205,105,90,200,254,219,116,115,137,126,139,87,108,135,75,
5,204,62,223,5,193,124,63,59,14,255,136,28,56,34,122,112,79,161,55,
162,55,23,212,163,84,229,64,162,129,12,193,91,215,230,193,105,70,73,99,
216,154,47,206,67,13,194,69,128,34,210,178,122,120,65,109,173,194,186,80,
163,170,84,144,68,141,51,52,128,214,161,122,190,61,58,2,1,24,84,32,
133,84,82,139,37,108,253,141,216,23,128,237,207,70,0,124,150,192,96,75,
199,48,164,29,152,195,80,27,131,213,130,111,135,124,217,11,107,71,120,0,
81,141,148,141,175,210,101,16,169,157,196,195,241,201,194,180,51,216,114,2,
79,29,75,222,80,31,199,29,137,147,173,36,168,137,1,67,97,246,72,150,
218,214,199,45,101,190,106,156,1,71,245,102,187,151,133,103,240,35,33,132,
176,200,105,17,81,105,101,142,24,228,244,166,11,225,6,204,190,148,133,91,
153,203,128,214,115,132,184,178,58,88,60,215,132,184,21,72,37,215,62,220,
152,6,212,204,33,64,174,24,73,208,128,222,53,114,234,186,247,208,235,133,
68,5,65,70,157,200,148,29,222,180,26,194,186,255,222,36,133,227,99,216,
138,83,197,115,50,136,135,233,26,127,121,236,235,147,253,215,9,253,191,57,
158,147,102,127,238,246,124,102,164,146,79,89,183,146,200,57,147,28,223,129,
132,91,20,248,77,65,185,224,200,210,71,118,105,188,233,59,180,55,175,16,
111,105,20,253,59,150,33,202,127,16,219,243,49,4,127,174,76,227,248,166,
79,234,6,245,166,200,38,252,34,32,162,188,220,100,205,116,53,205,75,48,
191,183,218,39,241,62,173,203,18,189,103,189,6,130,15,125,162,202,39,74,
97,95,253,190,99,255,94,38,246,175,1,166,65,9,73,237,230,159,73,125,
136,99,86,108,202,192,253,12,13,6,119,31,48,132,141,82,129,221,175,10,
135,50,89,34,151,95,152,6,8,128,217,33,221,177,129,161,107,208,88,24,
122,56,70,179,96,219,32,128,56,138,154,244,33,7,12,132,121,201,197,99,
164,67,249,98,5,206,19,65,47,200,12,21,227,113,6,110,86,158,177,216,
141,67,170,152,178,176,149,2,62,234,197,94,217,240,106,183,55,61,17,95,
77,103,71,213,36,125,242,105,140,113,55,224,9,215,244,221,95,101,17,157,
103,106,125,23,26,22,241,118,110,8,164,220,115,159,65,169,123,216,77,150,
15,51,186,184,57,142,163,248,252,192,1,113,21,248,38,95,175,0,48,47,
234,240,246,32,65,239,191,107,15,62,90,201,2,25,128,54,47,43,253,142,
150,71,108,62,142,215,72,253,51,67,15,214,172,180,146,41,204,140,83,107,
102,188,69,203,26,32,113,7,254,244,2,178,234,183,242,225,188,3,156,122,
23,140,85,203,253,98,111,250,28,96,166,153,236,94,147,170,33,202,9,1,
65,212,242,194,235,45,212,56,173,222,134,8,30,204,120,88,231,192,43,138,
174,205,91,137,115,102,192,120,116,44,119,249,149,127,64,119,63,21,0,182,
20,114,13,142,223,172,220,130,186,189,28,163,242,80,80,138,174,17,40,228,
133,78,182,201,26,184,215,12,195,235,164,234,199,63,89,93,71,87,249,145,
137,247,38,214,206,230,65,163,180,245,103,2,89,216,208,55,246,149,185,104,
3,212,228,103,63,162,58,151,20,138,36,160,171,79,148,136,25,72,43,63,
131,230,198,4,10,17,145,145,210,228,70,74,195,247,153,170,27,189,69,204,
90,0,247,233,58,143,87,90,33,244,219,35,123,111,96,126,70,45,71,177,
91,144,201,245,121,186,84,53,157,253,108,253,2,40,136,85,151,27,112,158,
38,11,151,174,223,219,22,90,206,237,121,255,194,32,15,185,207,187,253,151,
43,43,59,184,70,40,250,215,228,186,95,99,220,248,194,98,88,207,141,156,
248,141,156,197,61,71,38,117,38,170,197,231,207,7,15,173,55,56,16,245,
136,104,228,149,237,238,243,141,113,110,175,148,46,2,36,207,131,122,145,232,
14,229,76,21,184,128,250,199,55,69,201,145,175,57,104,28,117,47,219,35,
28,23,126,43,109,134,149,231,84,163,128,205,207,239,44,162,183,110,39,135,
127,233,56,184,200,81,217,101,132,39,229,251,43,169,52,154,199,124,104,61,
239,216,227,255,228,179,77,114,195,230,227,3,154,178,24,184,5,231,219,202,
160,89,144,73,216,94,247,235,225,155,213,18,154,45,105,199,123,147,176,216,
117,26,184,229,232,183,203,68,222,86,136,76,64,24,199,127,61,53,151,86,
118,109,237,110,30,139,183,17,246,75,155,138,141,200,39,65,28,129,206,206,
142,74,39,176,82,16,198,206,221,228,41,164,210,28,144,178,72,159,120,225,
108,168,76,215,107,61,1,54,191,60,205,91,148,235,157,179,181,163,89,19,
26,106,120,157,87,149,32,14,106,216,3,119,40,4,165,93,150,227,91,251,
171,70,218,141,52,40,124,26,192,19,124,93,188,29,134,163,251,240,12,214,
215,113,188,191,41,157,108,124,57,100,168,233,144,254,126,95,244,7,223,159,
186,123,158,43,112,93,178,108,200,54,134,157,106,144,116,105,161,182,33,229,
161,87,116,253,114,238,160,87,31,16,153,109,95,155,38,23,70,196,54,40,
91,105,1,208,0,111,103,143,119,139,120,12,192,133,195,63,41,65,117,157,
69,184,82,149,97,113,235,245,51,243,3,33,102,229,91,59,249,154,156,86,
197,16,247,174,173,182,32,123,223,136,252,97,185,238,148,44,229,165,186,99,
141,233,62,87,47,16,189,157,187,64,198,247,90,136,86,67,34,19,200,166,
150,213,192,137,18,173,239,24,2,197,48,62,146,237,224,109,14,86,143,211,
47,136,236,164,56,227,148,255,253,20,141,123,160,27,208,94,170,156,174,77,
70,73,110,220,225,4,60,184,243,120,42,179,66,1,120,113,23,244,223,8,
191,7,94,184,37,234,44,88,34,203,205,56,48,118,115,179,254,252,101,41,
221,46,9,253,102,32,109,227,225,113,196,129,16,25,135,182,160,113,47,177,
220,110,32,97,183,2,45,167,211,3,204,101,100,16,164,8,14,203,234,28,
52,202,74,109,57,249,22,16,98,218,144,160,128,187,219,195,193,147,123,127,
42,208,112,61,48,215,75,255,53,244,61,157,227,195,235,200,168,11,7,69,
14,235,26,124,120,198,247,83,173,6,192,215,52,90,151,99,127,236,156,135,
216,72,28,113,117,241,134,210,112,39,9,126,27,255,53,251,115,123,24,26,
202,139,182,102,5,36,220,78,163,71,102,189,119,236,215,73,164,243,196,42,
198,231,28,198,86,77,207,23,229,160,240,215,221,144,170,171,21,18,255,202,
130,156,29,51,152,69,158,91,224,139,143,103,133,140,78,86,93,126,81,194,
134,236,80,190,159,123,77,229,192,211,223,235,21,218,58,131,68,218,19,19,
202,126,137,181,171,106,65,217,36,147,169,186,207,39,85,185,61,52,186,181,
199,219,110,191,233,248,20,169,136,60,223,170,185,70,176,90,218,236,103,222,
116,27,146,101,128,100,97,18,214,127,111,254,205,232,148,82,161,25,26,242,
246,6,245,105,56,150,145,71,216,35,11,15,103,188,158,98,29,65,225,171,
1,43,75,78,219,29,83,91,113,243,124,217,33,233,182,219,134,170,190,103,
15,231,131,25,238,6,194,252,108,61,251,230,68,4,208,178,221,170,157,32,
165,146,177,137,36,196,55,163,20,110,103,13,13,133,71,177,75,158,71,76,
248,30,170,87,158,166,64,221,35,5,179,6,24,103,83,16,28,215,54,163,
11,107,71,167,5,4,170,116,151,174,124,6,145,101,238,199,254,19,89,83,
225,175,241,124,189,162,78,138,169,251,163,20,196,141,78,235,77,242,119,3,
61,179,128,132,202,207,9,175,201,31,177,210,175,148,110,232,26,232,102,175,
114,242,190,205,77,183,175,195,222,198,201,19,125,141,248,127,122,239,246,45,
88,169,17,37,9,236,205,140,200,72,117,45,158,191,35,108,235,31,63,151,
215,209,178,220,234,234,157,97,60,206,142,214,119,166,70,99,208,181,32,99,
244,147,247,52,91,23,86,76,146,137,74,249,250,188,173,192,236,251,228,194,
238,161,14,255,232,253,55,11,199,193,200,68,225,244,202,113,90,218,157,57,
111,66,85,104,46,156,232,187,63,122,50,241,54,145,239,39,222,49,83,93,
23,72,165,206,100,225,43,108,81,162,70,137,95,247,97,134,251,141,210,188,
114,255,91,214,248,135,66,6,130,218,143,44,203,17,10,231,103,88,85,247,
120,94,148,228,117,86,180,32,17,236,140,183,106,171,108,167,225,27,2,25,
114,240,152,171,85,49,67,223,102,112,89,228,13,0,255,92,120,129,52,112,
193,11,34,247,220,26,232,31,224,128,12,76,61,231,228,200,7,75,167,191,
245,53,13,169,208,54,135,134,98,80,222,54,130,142,163,233,214,173,5,221,
167,141,183,15,232,151,198,90,155,109,122,107,55,218,33,12,135,61,54,60,
226,99,230,193,110,66,146,102,54,30,158,161,46,208,48,120,108,251,192,179,
172,122,35,240,104,49,197,48,123,182,26,99,219,7,127,99,194,146,49,57,
49,102,197,232,49,178,27,108,53,181,167,54,58,31,118,129,85,129,99,141,
249,151,84,120,227,229,102,170,98,136,168,138,206,246,74,50,173,173,31,166,
164,109,86,41,42,92,19,91,223,159,100,114,211,40,2,247,197,135,171,120,
82,90,18,162,105,62,154,225,103,145,88,81,143,252,8,84,196,158,34,253,
124,97,254,198,220,12,32,171,255,169,73,30,62,142,224,82,49,127,181,92,
101,213,218,84,188,99,158,242,51,105,229,0,182,87,118,139,112,97,174,214,
69,94,149,199,243,168,48,92,169,245,68,86,114,255,189,246,105,153,80,28,
9,139,231,15,170,223,108,129,233,233,172,166,252,253,147,226,227,110,247,237,
42,79,244,210,158,23,95,91,199,34,171,13,184,233,205,94,137,128,11,20,
43,76,192,213,192,236,177,153,166,180,35,131,96,112,152,135,188,44,205,137,
122,126,202,175,25,217,5,107,26,154,48,59,25,93,146,130,222,42,126,37,
115,191,26,66,201,139,215,162,227,232,145,10,27,95,46,79,233,3,215,160,
54,99,242,157,29,125,63,48,218,183,85,130,171,53,48,31,58,136,77,242,
238,53,72,234,182,181,168,179,71,228,153,253,75,56,19,170,164,4,99,159,
235,196,40,10,79,159,251,14,89,183,102,152,252,241,178,229,76,140,51,178,
56,204,20,184,218,57,65,175,160,192,148,174,122,183,195,141,133,118,173,176,
35,220,106,53,240,179,69,201,82,176,183,224,36,126,65,119,250,58,59,78,
4,127,105,185,167,251,69,204,23,200,197,250,104,129,114,123,241,159,81,154,
49,45,14,75,86,85,253,165,210,255,52,181,76,171,72,253,196,166,176,146,
243,99,206,158,74,160,64,162,236,75,72,244,196,150,198,231,127,254,101,0,
34,204,20,52,242,250,168,99,215,233,182,96,172,157,250,10,194,150,58,21,
13,180,198,32,221,35,124,18,51,192,228,141,187,65,100,172,250,41,134,177,
28,84,58,43,247,156,206,42,27,110,248,2,74,63,90,213,191,152,195,128,
106,83,42,217,2,143,14,66,103,199,33,132,129,229,28,184,47,62,48,74,
117,113,39,43,216,211,49,46,165,1,252,253,1,76,157,93,113,237,69,123,
195,17,97,179,41,241,82,26,210,130,131,200,67,20,185,100,179,251,44,113,
58,61,140,185,55,17,253,207,22,112,42,175,155,227,89,170,234,207,94,8,
2,146,180,155,205,40,152,219,27,25,251,96,32,87,87,26,48,102,59,30,
19,34,12,60,1,176,224,6,207,98,160,34,5,73,81,253,175,102,94,242,
17,171,60,108,105,178,113,217,117,130,206,192,28,117,98,127,9,143,41,89,
150,101,34,194,198,91,20,254,88,65,196,9,223,161,216,208,33,4,97,157,
114,186,253,61,252,255,210,242,76,90,206,44,50,145,207,147,81,5,132,38,
140,14,197,44,141,195,247,223,194,29,113,110,247,183,234,141,16,141,225,34,
104,217,203,156,74,142,57,23,90,72,134,189,227,124,177,197,108,32,88,235,
189,135,231,35,184,66,89,100,202,120,35,109,125,254,71,148,185,183,91,19,
183,191,12,200,72,90,170,13,143,151,234,8,248,235,31,89,205,152,119,67,
47,96,16,149,177,50,51,134,12,173,3,55,226,254,57,87,122,170,61,221,
77,107,236,197,75,80,219,144,50,87,41,161,90,31,202,71,174,178,22,214,
7,181,201,101,120,130,162,68,142,13,32,226,193,229,238,22,2,33,76,236,
72,242,150,86,247,31,118,152,31,251,161,100,32,240,194,165,188,48,139,14,
107,118,60,3,74,13,127,78,94,11,169,66,83,190,3,8,200,247,1,88,
54,69,201,178,2,91,87,61,21,106,71,32,76,49,148,233,11,105,95,168,
20,168,80,117,249,135,44,49,36,87,109,236,41,19,135,214,12,161,229,83,
139,169,24,117,66,58,169,57,108,213,133,3,204,245,199,147,201,188,176,8,
115,71,243,244,176,204,146,12,208,190,30,83,78,181,49,46,176,227,108,6,
151,104,79,185,163,163,29,194,178,35,72,123,179,185,172,153,137,107,158,10,
148,116,67,90,47,95,191,102,205,204,236,107,252,102,156,28,169,43,124,219,
136,37,199,21,246,100,134,222,245,55,237,85,212,136,173,79,37,213,24,75,
37,40,56,13,205,71,198,15,100,189,244,121,130,165,51,211,226,244,163,178,
56,149,85,202,190,218,78,128,202,129,121,58,24,82,55,102,131,201,161,76,
76,248,204,99,190,105,108,106,47,136,138,190,28,222,255,45,180,68,16,72,
220,124,230,132,90,183,111,127,87,22,255,109,77,118,217,93,188,19,37,229,
45,127,172,36,110,81,116,38,206,78,58,241,188,139,33,41,113,11,238,150,
202,248,89,134,72,38,175,9,223,168,56,0,59,154,48,129,128,14,202,35,
85,177,81,212,242,177,203,208,59,207,208,190,29,32,172,19,145,118,181,197,
240,170,148,19,81,104,14,119,166,33,9,223,73,167,17,197,167,81,25,43,
101,39,45,71,218,116,147,108,114,79,99,124,154,192,62,6,119,5,218,1,
185,160,17,217,220,16,110,4,41,220,185,176,244,2,72,6,73,125,62,87,
167,221,48,239,239,237,54,33,76,41,217,148,151,215,153,223,245,101,199,66,
107,18,213,205,192,145,93,55,251,209,208,86,225,44,8,81,225,92,56,106,
128,133,59,201,160,132,21,254,175,120,186,184,130,213,63,105,244,10,113,181,
67,162,49,96,67,146,62,243,202,181,154,141,89,116,144,254,59,37,152,104,
215,7,54,0,41,135,74,194,144,195,222,204,184,72,118,19,232,230,96,95,
229,7,214,68,50,247,211,217,79,82,4,223,113,33,192,34,62,250,202,168,
231,148,170,187,181,239,90,75,91,146,92,119,210,65,107,149,248,4,173,0,
202,44,26,191,51,85,21,69,66,243,67,37,33,147,196,61,217,69,123,208,
29,101,207,28,22,58,51,58,172,40,183,199,30,218,54,124,8,183,139,115,
221,56,76,193,186,19,190,47,136,66,61,66,34,67,136,111,152,71,86,7,
227,111,241,203,191,16,215,123,142,177,227,85,89,52,151,194,1,4,169,103,
103,250,159,211,84,158,130,234,38,106,110,31,73,169,172,152,166,180,46,102,
153,168,112,252,34,34,65,213,154,143,27,97,228,131,96,78,15,193,230,133,
238,2,150,94,25,243,146,140,209,131,103,210,174,107,195,139,76,210,64,212,
253,22,146,62,171,235,38,235,163,232,216,139,5,29,101,118,167,153,162,41,
192,210,88,214,136,120,64,71,13,249,32,153,245,117,169,239,50,57,173,241,
214,47,33,253,228,69,31,212,214,69,54,221,250,88,202,105,151,13,76,94,
62,15,99,254,33,154,235,0,46,131,18,192,95,73,246,57,229,245,147,144,
162,123,116,22,134,13,148,189,124,12,246,234,222,194,45,138,118,105,40,183,
28,20,204,204,108,10,117,34,202,136,115,87,152,104,192,50,114,19,45,159,
143,172,79,196,143,247,40,137,187,248,148,157,185,158,230,114,29,197,142,9,
55,198,26,106,89,2,6,97,80,182,123,193,89,253,212,33,23,87,169,187,
11,18,43,155,138,130,137,220,6,115,120,164,51,250,22,160,27,117,251,29,
180,118,248,75,26,57,148,144,225,113,141,25,87,11,3,249,85,32,238,43,
177,175,228,151,171,157,228,141,39,226,177,84,183,38,118,97,68,231,252,101,
121,111,110,155,226,236,161,128,166,62,61,23,26,131,146,99,239,142,170,200,
92,110,15,128,119,22,33,104,253,206,128,175,20,79,6,106,195,231,117,254,
75,126,4,136,49,252,250,51,51,218,243,147,171,160,12,99,149,80,135,188,
162,185,112,153,5,184,237,78,102,28,251,1,217,222,53,115,91,155,39,145,
16,18,170,36,153,16,207,14,181,230,187,33,63,5,191,106,73,90,19,196,
11,177,66,170,37,83,227,10,242,140,251,248,0,56,210,10,192,100,251,246,
1,78,231,176,23,7,146,126,252,222,142,137,70,56,214,170,203,101,40,159,
192,179,121,50,229,52,206,65,78,161,216,197,167,203,214,66,34,62,208,23,
226,104,177,59,125,103,49,122,170,237,243,255,136,131,209,142,130,225,36,221,
132,198,30,123,86,241,92,78,138,85,16,134,223,164,117,253,109,29,76,200,
101,210,163,245,126,171,60,92,0,159,18,70,56,191,138,33,197,41,149,254,
45,247,150,214,127,106,177,237,166,184,238,240,228,224,164,114,201,144,247,133,
107,127,100,132,83,159,145,16,45,85,92,212,30,110,76,55,111,236,170,199,
10,190,202,26,209,175,136,116,8,153,222,187,51,254,95,27,84,50,205,64,
202,117,144,126,36,25,212,68,2,121,243,193,82,207,145,25,28,148,67,39,
202,68,122,131,172,72,185,153,204,217,251,178,93,108,233,180,58,173,47,184,
173,202,169,120,137,241,132,246,120,165,132,193,20,26,132,67,142,22,218,25,
224,187,173,74,173,196,124,201,13,72,152,75,139,232,133,114,143,35,54,56,
219,210,89,189,224,94,46,178,117,18,251,149,202,65,249,198,1,146,62,85,
129,82,119,57,217,150,80,154,151,68,118,159,2,7,146,132,152,163,184,13,
98,210,209,33,88,230,208,180,167,91,17,220,45,51,169,107,123,87,168,216,
169,74,169,20,234,92,143,100,159,29,27,46,56,96,213,209,108,84,212,79,
113,25,55,133,218,208,115,76,118,250,53,212,33,201,250,237,88,100,123,161,
200,209,210,205,64,82,91,86,122,213,182,71,51,64,53,13,7,229,218,45,
116,190,178,192,46,199,44,140,82,118,15,205,221,142,24,95,165,115,15,23,
13,16,149,73,70,222,125,230,104,30,60,103,67,1,98,15,84,230,250,136,
164,25,99,25,25,184,12,98,249,252,135,233,66,22,212,253,8,200,111,22,
99,19,93,156,86,128,224,197,234,216,75,87,93,119,114,60,174,223,161,119,
174,92,248,83,74,196,99,228,90,212,127,188,145,4,85,28,66,41,107,58,
157,40,171,66,79,223,78,157,65,49,80,92,158,143,68,171,237,110,126,26,
33,41,157,89,67,111,252,233,66,122,255,246,235,76,197,48,146,92,43,240,
105,172,219,140,132,9,247,65,2,226,63,158,197,151,34,222,251,111,204,202,
180,114,247,142,169,17,224,100,1,90,183,26,51,47,183,150,129,45,219,75,
248,174,173,21,180,9,231,60,238,244,87,172,154,19,3,69,126,77,137,202,
187,86,121,54,161,80,206,252,152,86,62,16,81,203,10,120,224,252,62,194,
137,192,200,203,26,112,161,121,101,232,245,249,163,170,27,203,38,11,192,40,
49,112,25,131,33,127,144,57,61,16,1,182,233,59,10,78,254,77,123,252,
47,50,203,61,225,90,221,230,43,55,212,23,154,30,165,99,147,163,230,194,
68,160,223,223,97,25,140,98,53,86,65,133,255,136,76,95,95,254,152,143,
142,213,53,82,129,119,26,141,100,49,245,14,115,115,169,93,248,198,198,157,
80,213,239,202,204,79,39,227,77,178,19,35,30,42,60,66,123,74,162,60,
102,31,233,66,203,118,67,219,232,176,235,243,6,12,154,234,226,52,87,174,
158,30,134,161,32,166,204,48,129,249,180,173,255,144,134,245,81,138,109,164,
33,84,107,159,176,15,31,17,97,200,220,191,137,138,145,137,205,162,31,3,
110,225,108,148,167,84,34,164,141,93,164,56,195,32,59,74,206,58,106,165,
189,98,64,201,8,1,19,225,209,235,113,85,130,82,141,171,110,178,220,132,
14,92,178,1,168,44,5,4,128,45,33,131,60,91,27,245,92,133,134,66,
206,25,109,181,226,24,64,194,115,138,247,126,227,169,193,141,216,181,171,234,
13,94,225,47,123,142,33,24,135,87,236,74,215,188,80,142,21,149,203,115,
110,195,97,147,35,48,1,54,18,117,202,237,96,57,111,87,234,52,101,222,
208,72,98,144,245,86,38,208,136,100,195,249,39,9,210,104,103,185,46,107,
74,192,31,193,133,211,120,69,75,9,207,67,67,32,227,93,166,38,138,122,
11,154,117,87,252,218,10,0,75,30,152,249,37,125,7,229,49,40,206,133,
55,191,4,204,47,15,222,204,89,193,210,250,83,134,150,115,95,234,33,206,
240,129,101,118,126,227,113,167,56,235,48,78,153,201,55,123,166,53,152,121,
243,125,161,188,118,16,109,147,86,201,228,155,125,158,62,176,229,15,0,35,
20,233,29,215,48,113,150,134,0,55,138,251,77,175,37,99,113,158,1,17,
250,232,180,146,153,33,157,109,27,102,48,141,101,247,49,83,17,59,89,16,
88,222,43,127,179,174,156,224,165,141,17,20,248,231,116,208,243,24,94,251,
152,195,196,151,108,117,12,199,36,159,166,8,13,211,223,90,102,182,216,8,
86,59,201,139,19,49,97,181,187,110,100,14,5,130,204,68,142,92,209,157,
162,14,199,121,67,93,241,60,27,140,216,74,43,157,134,165,160,233,237,223,
38,118,94,67,194,73,252,79,215,224,172,120,157,74,99,27,96,58,214,156,
123,251,185,244,177,105,38,131,8,48,4,116,237,135,0,24,97,180,61,59,
116,161,250,97,120,10,199,5,143,129,38,110,161,32,145,196,216,208,157,1,
73,170,56,220,206,174,70,145,41,191,160,31,56,105,242,62,107,242,97,195,
64,152,252,175,159,130,238,143,116,196,226,246,118,100,213,172,10,100,143,226,
148,13,25,159,24,127,252,20,0,218,0,204,166,54,175,87,249,253,29,123,
189,208,100,108,50,255,208,177,229,91,161,81,209,251,176,182,175,134,15,122,
153,98,121,170,55,124,23,66,39,127,104,144,207,132,152,1,57,46,13,122,
42,98,238,67,67,129,28,188,187,240,185,81,231,221,193,170,48,20,213,74,
24,141,226,134,43,107,87,208,216,134,118,227,165,70,165,217,255,226,213,132,
158,251,184,202,116,132,175,243,15,106,66,101,170,163,145,47,53,146,22,227,
112,158,223,68,166,217,100,187,82,54,46,144,221,67,63,107,27,252,212,92,
23,238,10,151,51,94,242,78,180,164,53,139,247,120,177,211,132,248,161,199,
57,179,251,16,165,228,76,220,138,46,59,38,207,105,149,0,251,113,41,160,
84,146,232,171,118,71,203,204,24,170,18,29,232,214,207,222,65,40,187,14,
199,111,238,244,131,100,180,179,191,120,105,94,39,200,125,92,140,118,43,185,
62,75,176,151,68,86,223,169,165,200,221,70,168,244,153,28,194,151,78,245,
48,139,87,248,32,249,2,27,233,12,60,224,88,203,34,54,104,224,5,72,
230,191,219,149,89,153,171,75,222,115,241,170,114,171,120,128,151,118,138,38,
212,89,220,154,202,248,166,5,36,177,143,148,192,168,33,74,218,247,185,36,
111,180,127,33,158,255,241,4,200,24,147,126,166,243,129,195,127,221,193,34,
121,243,178,39,15,175,143,234,127,206,38,45,208,4,110,14,64,220,37,56,
83,183,84,115,77,6,11,241,98,43,83,21,30,244,226,29,86,16,69,98,
110,182,55,190,161,180,63,169,217,158,247,186,189,49,243,168,202,241,27,131,
230,184,216,78,254,35,103,66,59,44,43,29,36,42,31,83,67,124,53,255,
94,88,192,232,238,7,218,237,179,56,34,200,127,13,245,217,184,234,223,51,
8,37,162,247,241,219,175,163,95,81,96,47,183,71,62,60,178,130,194,74,
178,190,86,174,39,254,138,90,30,73,163,132,44,16,241,13,119,92,180,120,
95,75,138,17,65,36,9,68,56,108,38,65,3,87,89,130,218,89,0,86,
182,75,27,108,184,182,91,170,47,17,37,12,244,151,167,230,77,56,85,164,
150,88,33,67,250,162,63,55,26,166,121,91,60,77,144,89,227,229,255,202,
228,122,182,20,142,127,193,21,158,75,15,211,66,126,2,14,123,64,49,149,
107,235,32,12,30,9,9,156,135,79,220,250,53,204,121,81,231,121,141,164,
239,93,155,18,154,30,17,183,128,72,235,116,216,145,201,51,255,125,42,94,
161,250,162,131,23,208,137,135,121,82,34,15,107,49,192,174,94,126,69,232,
151,29,197,223,109,77,131,26,52,160,65,104,212,67,57,80,81,32,254,104,
3,93,125,94,51,165,137,166,48,110,248,0,97,138,16,133,186,26,238,247,
74,220,224,117,231,109,7,50,255,171,158,201,8,186,201,225,220,223,43,189,
27,99,203,140,20,48,239,118,86,75,97,249,126,105,187,111,67,194,121,157,
16,142,17,219,79,171,155,186,238,73,49,99,9,31,75,201,250,68,247,137,
90,162,55,156,67,108,168,133,118,65,85,92,200,51,125,231,100,248,145,128,
102,88,125,8,76,233,14,193,240,162,65,4,226,128,210,53,192,232,247,247,
178,227,193,38,62,211,216,38,22,99,15,157,52,39,238,46,22,87,86,217,
232,37,187,129,144,34,38,99,79,133,131,90,78,105,44,142,223,49,101,216,
247,43,254,163,190,227,166,4,0,164,103,141,103,90,211,20,9,234,224,193,
0,29,37,63,68,187,97,39,233,186,7,191,223,166,207,218,91,7,77,100,
135,154,48,121,8,124,226,179,117,189,127,197,20,34,125,128,178,219,133,107,
241,229,129,124,105,223,41,83,217,97,194,216,138,12,236,194,247,195,224,244,
3,115,225,178,130,208,50,217,89,102,200,89,94,237,190,12,117,77,245,122,
248,243,37,169,206,219,205,105,118,7,73,242,99,77,43,205,117,48,24,15,
33,161,248,125,235,212,177,207,164,153,188,199,237,153,37,1,122,146,247,253,
91,166,64,245,74,136,16,135,203,232,219,188,147,28,91,162,41,192,125,37,
223,113,144,47,224,133,234,0,155,139,55,204,144,201,94,42,242,244,206,27,
152,225,50,176,93,228,98,29,250,152,226,157,209,109,225,117,110,138,42,223,
161,171,84,150,146,241,172,55,151,166,114,75,161,182,163,229,210,63,48,94,
24,6,40,33,104,3,2,239,39,53,40,79,224,168,232,134,243,212,186,3,
251,174,50,22,226,249,93,102,103,2,247,20,140,177,0,70,88,139,66,65,
17,185,171,11,16,228,10,46,217,142,223,94,226,234,248,58,8,70,199,175,
55,108,174,22,55,223,31,61,152,85,217,214,35,169,62,191,206,208,77,250,
124,29,2,137,151,222,102,237,248,32,168,215,128,154,172,229,76,83,123,88,
226,205,8,40,203,130,52,129,25,238,208,207,171,48,131,191,102,162,233,175,
70,174,34,83,36,136,15,155,212,136,115,57,55,176,53,193,105,8,74,198,
213,78,105,21,72,72,34,24,31,223,174,126,191,49,221,33,41,158,21,199,
41,56,92,30,90,77,223,236,210,107,229,242,75,178,34,206,199,34,248,238,
154,218,140,128,224,97,10,34,58,212,199,192,123,45,31,157,80,223,171,53,
205,72,65,180,167,44,155,27,179,123,224,22,45,148,47,67,92,138,57,125,
35,97,151,199,78,111,243,85,230,237,250,136,153,111,12,229,121,95,251,211,
42,26,237,204,55,241,28,32,153,126,24,113,88,251,208,75,250,180,98,206,
43,195,175,158,102,127,72,9,53,66,141,172,92,47,188,40,153,249,97,200,
51,92,145,50,111,169,7,173,42,45,23,178,241,239,37,111,215,80,113,92,
179,122,51,216,15,5,204,100,56,36,251,28,120,29,238,76,161,34,217,191,
93,148,43,44,80,224,129,236,134,48,55,4,175,69,67,223,30,252,37,227,
125,179,73,106,235,251,235,169,77,191,173,118,104,155,247,232,36,128,207,232,
128,233,85,57,74,239,130,228,245,218,250,67,212,33,40,213,194,162,232,98,
118,249,85,27,243,157,146,149,138,239,160,14,197,159,82,31,135,219,78,129,
23,108,10,61,48,158,111,72,104,49,147,150,64,125,167,161,247,168,134,95,
103,71,31,22,201,122,42,147,207,30,39,225,153,108,240,33,134,152,0,122,
251,13,203,193,118,201,123,189,70,209,109,12,225,109,191,236,246,31,60,112,
110,166,39,203,164,202,176,54,77,94,160,174,207,135,150,133,7,96,178,144,
3,218,115,190,227,250,12,90,40,253,245,169,19,241,44,214,246,51,29,247,
4,199,61,188,233,73,91,87,133,134,24,248,38,43,246,95,158,44,61,200,
47,99,19,32,84,87,167,26,98,244,237,118,172,240,110,106,132,157,194,83,
164,150,88,184,249,23,188,253,3,236,123,59,81,112,114,66,40,228,94,83,
75,36,168,223,74,12,58,185,144,124,243,79,193,222,82,14,157,117,129,12,
73,225,36,47,197,202,204,112,107,189,169,132,45,39,171,218,103,58,123,198,
46,116,12,80,89,18,130,112,134,129,205,179,109,152,90,4,56,43,221,129,
93,28,215,239,21,122,255,102,144,119,121,2,53,87,7,189,141,74,77,161,
251,23,80,189,173,181,173,233,76,183,187,4,35,214,208,78,35,210,192,51,
214,152,124,36,176,192,112,15,165,150,105,140,151,58,63,181,12,58,198,167,
21,44,123,158,69,116,53,18,15,139,61,25,78,88,118,216,94,102,157,39,
137,28,173,203,203,230,110,29,210,215,64,139,154,216,80,93,46,221,108,162,
162,101,37,180,145,113,16,111,49,59,71,55,74,201,245,25,89,60,29,82,
9,87,50,184,90,104,209,249,176,140,121,114,56,150,97,119,62,206,177,241,
207,97,188,243,151,145,5,109,218,243,172,228,1,10,3,144,196,125,12,198,
125,92,136,9,69,35,112,194,116,194,76,220,20,239,9,195,72,66,118,233,
58,37,200,189,204,81,148,118,189,28,145,121,175,220,128,6,205,147,92,171,
88,89,8,103,142,124,204,185,215,224,38,102,55,94,165,77,195,50,226,47,
30,229,164,32,64,60,24,135,233,237,175,52,149,177,22,186,0,139,144,138,
226,155,196,190,229,8,105,110,255,248,146,67,52,29,56,52,147,193,40,74,
73,5,242,152,215,105,74,158,224,180,236,250,171,75,81,199,44,34,221,97,
224,236,38,80,63,140,96,71,234,210,79,91,173,25,150,46,79,29,61,61,
216,176,191,13,152,130,201,76,72,64,249,128,138,23,186,251,243,36,101,198,
237,142,20,20,107,197,108,40,50,240,24,76,72,36,60,213,179,45,76,49,
73,233,244,200,99,23,138,60,249,127,164,250,41,245,24,197,237,59,245,31,
58,44,87,140,194,69,172,202,42,197,101,92,145,57,222,110,151,4,178,7,
111,38,224,229,142,158,23,104,47,216,39,232,35,237,5,230,141,79,23,157,
208,12,97,234,88,218,238,7,148,101,206,16,100,172,182,142,241,5,176,81,
69,251,147,160,47,221,102,127,36,194,50,163,155,100,191,191,43,72,25,162,
142,51,123,41,93,155,86,7,136,96,67,248,211,58,235,97,163,1,249,29,
180,118,73,128,36,169,58,104,105,105,136,93,252,238,221,251,211,44,180,206,
113,6,100,139,147,223,83,38,72,151,63,205,161,129,2,23,42,164,242,242,
197,116,11,181,25,196,173,79,179,212,203,43,43,107,153,69,211,179,28,193,
235,254,215,63,1,229,49,152,15,13,168,79,199,39,168,168,100,191,107,197,
220,155,187,201,26,166,122,24,244,33,172,210,221,185,176,159,31,19,29,87,
89,25,39,139,75,77,205,106,32,18,189,247,164,74,189,42,7,139,97,145,
236,162,196,166,115,118,115,138,250,64,221,15,50,157,67,43,0,148,223,5,
213,102,25,63,84,99,75,127,158,82,56,155,197,124,120,212,135,44,116,199,
195,136,201,119,233,187,8,213,233,180,26,173,205,69,63,232,167,236,250,13,
239,210,35,16,28,209,102,72,245,73,183,220,99,220,18,67,111,40,254,89,
224,233,0,17,152,137,32,138,79,12,212,159,238,71,12,228,163,251,27,27,
31,239,224,8,242,199,251,69,219,245,164,67,14,180,210,28,136,227,56,76,
112,113,51,84,243,171,70,15,159,64,175,54,106,59,31,80,65,4,86,251,
231,247,141,246,117,242,200,247,54,112,128,90,35,143,126,214,59,160,224,70,
106,203,247,87,191,169,97,58,81,217,47,133,112,179,171,144,102,72,11,2,
251,91,108,120,245,166,52,47,101,229,80,254,242,252,242,104,10,125,111,153,
218,80,219,47,249,222,193,184,11,212,156,202,120,151,175,160,101,163,38,81,
245,99,142,36,56,10,54,139,191,60,175,45,197,56,185,154,41,115,20,175,
222,52,185,168,15,156,173,227,105,194,223,18,212,196,207,140,211,234,132,106,
80,65,177,72,178,245,113,237,72,75,184,17,48,226,91,184,103,64,209,66,
234,15,137,123,206,153,117,249,106,151,232,152,184,80,207,156,115,37,134,235,
198,85,39,241,163,209,235,118,235,156,57,27,67,176,209,41,18,22,225,77,
61,152,222,198,243,74,115,65,143,17,97,75,181,84,250,3,176,109,69,34,
76,0,111,206,198,250,165,34,182,86,57,130,157,227,123,163,131,230,214,147,
192,241,86,113,74,46,234,2,35,220,156,73,251,243,17,188,55,100,191,132,
49,59,97,146,112,12,157,17,237,124,78,4,117,254,56,146,96,205,122,120,
153,148,242,180,176,80,182,75,79,57,87,117,223,205,159,199,174,192,125,40,
58,231,112,16,81,83,105,76,244,145,241,153,9,71,20,229,230,98,92,186,
58,41,134,25,129,60,189,106,230,151,81,39,119,106,174,162,170,161,152,249,
170,81,121,17,56,18,100,243,92,31,58,155,25,160,26,151,186,96,150,34,
186,49,184,28,53,180,40,208,11,179,151,86,71,232,149,251,67,10,224,133,
149,103,198,127,129,241,239,230,147,216,104,1,94,164,38,132,9,231,221,117,
178,187,230,161,52,88,73,188,25,15,36,225,89,94,56,7,251,82,16,186,
247,174,89,137,29,59,160,132,13,183,120,134,19,125,236,252,2,123,140,186,
255,242,95,223,50,204,236,169,130,166,43,210,56,148,248,190,212,132,88,205,
93,150,87,242,83,56,255,174,224,65,253,130,10,241,123,184,240,147,99,241,
8,21,45,245,136,166,193,182,117,178,24,70,155,241,156,243,205,112,169,228,
39,134,228,76,168,115,229,20,37,55,199,113,241,120,249,18,129,202,223,232,
134,69,130,234,108,124,90,48,145,126,212,168,207,105,245,94,24,43,190,217,
170,106,48,198,149,152,160,75,158,147,177,252,159,14,137,48,249,141,41,149,
224,240,194,32,247,71,104,91,237,115,103,122,24,187,23,5,194,48,139,67,
191,188,210,171,240,123,190,75,111,141,194,2,177,192,4,135,97,53,83,13,
143,13,164,96,80,65,167,158,57,207,111,154,169,48,172,210,184,55,72,120,
127,110,101,233,48,83,207,252,243,16,98,235,185,32,202,41,244,102,222,90,
45,125,24,105,132,162,204,194,207,22,156,57,223,61,37,181,57,76,99,12,
55,36,80,38,252,149,191,12,235,186,185,57,199,57,67,97,91,182,139,113,
29,87,91,34,198,189,104,126,225,48,106,162,219,83,197,195,59,188,186,185,
225,213,208,75,164,68,39,138,159,185,185,43,32,46,231,75,116,18,50,202,
238,217,117,87,50,224,120,248,45,63,1,106,196,78,28,54,85,56,105,155,
165,235,93,13,107,167,136,29,168,126,255,69,90,182,11,30,178,181,187,174,
223,109,31,163,72,191,213,247,221,244,135,167,35,86,197,154,33,211,69,100,
40,48,87,83,212,221,229,204,116,77,204,232,47,209,81,102,100,216,163,181,
55,90,12,30,183,53,100,126,126,68,190,5,61,28,80,231,62,243,83,136,
183,29,150,120,82,18,27,34,211,134,132,193,206,210,5,45,96,242,75,157,
78,224,168,201,52,236,169,186,48,215,229,192,94,154,190,88,78,49,64,193,
149,39,39,211,3,174,157,48,3,168,55,106,116,251,204,206,222,249,69,7,
116,42,202,88,109,197,33,205,129,11,165,159,107,204,168,104,171,74,203,46,
231,62,113,157,101,201,144,65,16,92,19,24,136,160,138,132,143,79,32,83,
24,50,195,2,94,144,228,147,142,17,115,84,57,20,17,62,170,26,119,211,
36,3,192,192,31,34,16,39,147,72,97,84,153,16,181,240,56,252,201,12,
233,63,122,8,137,50,90,55,98,107,38,68,119,229,192,106,160,191,24,188,
235,95,233,128,90,99,15,230,9,123,107,61,237,129,153,112,75,26,53,139,
189,65,211,5,233,59,131,197,165,115,137,95,43,181,169,175,7,254,2,248,
164,222,182,32,62,93,248,50,88,26,11,145,130,220,39,168,96,206,216,79,
126,181,69,35,144,56,232,38,32,226,128,101,31,244,9,57,116,107,219,214,
106,56,132,150,138,49,3,62,69,80,241,224,172,219,118,176,119,155,35,56,
120,165,90,119,87,40,21,152,157,100,239,101,163,169,233,165,66,60,169,99,
5,205,114,15,102,78,109,36,225,208,84,45,183,40,153,212,105,60,190,237,
185,249,250,214,7,219,46,44,45,156,62,228,145,36,131,213,23,138,133,52,
245,29,176,159,217,157,131,29,58,10,245,215,61,127,1,90,253,9,227,182,
96,131,169,62,222,151,212,24,221,241,186,231,126,186,71,114,173,222,16,181,
241,88,172,57,145,103,32,213,210,108,141,8,5,245,49,115,102,101,7,206,
12,114,210,159,105,1,50,213,88,19,189,29,119,193,104,51,146,141,177,192,
54,235,53,80,216,83,123,148,166,117,242,70,169,242,70,191,73,49,21,232,
207,168,253,51,254,162,23,116,16,79,124,24,188,102,28,103,173,64,177,143,
158,23,165,219,240,153,97,244,211,188,58,205,96,151,205,221,119,39,32,253,
81,119,255,70,94,147,224,149,232,200,1,129,84,205,51,134,207,222,39,21,
98,43,140,64,42,249,11,124,26,88,224,32,141,249,29,199,248,95,156,136,
3,229,190,178,81,40,162,57,104,107,9,131,116,137,27,16,160,240,166,135,
226,65,8,119,111,123,184,183,200,238,178,199,12,71,193,22,34,182,123,180,
147,207,119,64,42,105,25,38,9,223,204,73,14,42,133,190,154,175,253,195,
245,29,86,65,36,121,230,162,216,252,237,79,89,3,210,61,204,114,90,46,
3,235,157,139,162,210,238,40,34,128,123,146,5,160,4,46,1,76,196,122,
136,135,117,212,122,185,77,230,67,133,206,67,252,214,23,111,228,206,168,87,
15,9,59,100,100,164,130,224,109,149,235,57,204,2,112,173,232,129,200,160,
158,102,139,124,184,39,54,96,223,231,41,103,222,98,113,172,228,15,15,224,
196,62,84,3,65,105,37,237,74,188,170,203,142,4,77,157,206,154,128,50,
227,144,27,193,255,60,143,48,56,69,215,1,122,163,204,51,7,64,26,115,
122,90,70,182,233,68,141,183,43,237,129,12,3,108,67,18,88,72,185,175,
119,125,235,20,147,63,134,182,68,227,188,46,7,115,91,61,42,102,149,247,
141,241,224,183,149,222,104,173,192,113,243,39,160,176,53,26,41,174,25,4,
161,226,191,232,180,163,172,251,239,239,42,114,8,247,21,74,182,181,168,216,
133,236,136,142,16,14,53,240,234,247,155,197,203,109,179,53,247,67,205,114,
122,51,186,83,133,127,246,222,196,218,232,254,231,12,123,56,13,5,128,208,
152,49,159,238,243,208,175,52,123,103,147,43,49,92,32,109,62,70,145,75,
226,23,94,131,154,242,0,63,63,221,78,251,135,106,56,226,79,1,35,133,
158,176,215,144,31,16,119,188,68,150,20,69,119,236,85,1,72,3,98,227,
49,223,144,115,33,235,100,224,151,57,19,111,244,242,108,50,112,160,131,58,
249,240,184,116,175,113,182,22,13,53,181,84,213,12,78,188,101,195,104,138,
136,166,104,145,194,165,121,49,249,201,171,231,150,4,234,86,248,78,230,115,
249,40,79,65,253,105,87,30,100,169,0,198,101,35,16,138,132,38,157,210,
173,5,146,205,166,242,39,145,135,190,14,208,146,21,233,76,227,212,135,27,
196,39,129,168,113,6,9,244,103,203,138,149,41,105,187,108,137,230,90,159,
209,161,233,140,79,129,202,219,162,110,23,91,61,28,61,92,118,253,175,199,
207,197,4,189,41,23,225,215,242,251,146,86,18,166,141,73,30,205,127,162,
186,147,195,136,30,134,205,35,65,250,216,161,211,212,96,229,16,64,207,144,
106,117,110,192,201,120,234,95,223,142,231,16,144,100,205,86,200,164,20,184,
35,47,138,182,188,199,0,35,101,178,243,20,203,66,160,63,58,12,231,76,
230,187,160,254,235,221,16,17,50,102,22,63,113,27,106,60,138,208,104,37,
80,251,253,233,197,215,80,195,235,235,83,79,125,163,35,246,120,129,182,245,
100,37,0,3,5,168,50,238,111,166,221,6,33,23,51,229,92,82,83,12,
39,161,35,30,95,185,15,27,72,142,65,214,252,184,249,225,188,83,187,215,
81,120,180,195,202,177,86,90,104,241,104,172,126,39,155,114,63,48,120,239,
77,201,252,89,172,209,153,40,246,111,108,4,76,175,190,207,96,247,75,217,
19,219,12,117,67,113,108,71,63,100,57,43,224,213,7,153,185,168,23,42,
25,109,45,205,46,129,123,227,157,244,207,35,95,51,130,128,12,252,236,25,
121,21,161,111,62,30,135,173,126,254,147,114,14,55,32,116,250,82,249,229,
97,135,239,14,158,130,30,221,54,117,218,46,122,114,243,224,6,76,184,70,
231,104,19,225,195,161,187,116,102,235,144,203,45,223,26,22,248,107,10,40,
95,110,95,216,193,242,150,150,188,80,237,63,247,241,3,80,167,229,22,111,
92,117,228,92,166,141,248,127,232,179,242,17,234,33,74,255,69,1,241,97,
74,254,175,187,66,6,104,180,48,44,120,221,124,82,204,28,24,39,90,23,
191,150,99,221,126,71,167,189,236,118,61,163,122,47,144,73,115,179,0,197,
88,44,120,211,153,189,27,239,240,114,244,164,32,111,200,99,135,248,50,173,
21,229,234,194,125,128,94,43,200,54,17,76,28,215,76,222,56,61,103,181,
65,44,189,136,130,172,73,19,180,164,81,168,15,176,69,109,103,151,213,228,
145,219,149,63,252,19,13,190,20,230,54,210,64,82,16,12,178,25,3,165,
119,22,131,32,159,249,123,221,176,252,243,222,180,41,8,157,127,141,255,23,
157,109,78,102,200,8,255,71,78,115,76,0,136,135,129,217,126,91,68,92,
180,131,136,14,44,100,10,207,172,141,70,114,115,12,245,38,215,8,106,197,
74,78,14,221,99,197,126,204,217,113,177,149,52,67,179,59,133,87,148,20,
145,234,122,193,240,48,103,223,15,161,201,78,111,78,93,60,197,101,49,51,
208,53,252,144,211,29,93,190,98,120,123,250,191,2,8,145,156,1,220,10,
54,70,197,197,215,172,213,187,51,11,164,62,247,39,79,228,155,218,231,65,
248,81,112,121,204,201,90,87,182,175,200,119,182,179,252,48,115,14,113,29,
115,185,248,201,215,74,220,53,117,205,152,104,144,68,203,179,208,228,53,215,
178,153,75,144,30,156,164,160,133,170,208,26,16,58,146,109,110,237,199,58,
180,15,128,245,8,148,194,159,232,214,188,135,181,61,233,182,159,233,216,250,
38,193,53,192,218,144,85,179,171,69,178,43,139,72,222,121,83,198,227,35,
183,61,8,221,27,252,4,34,143,142,198,58,193,97,162,24,100,128,245,208,
243,218,233,21,146,5,75,97,244,81,234,76,224,29,85,243,242,169,191,195,
234,229,14,48,150,129,220,233,133,30,122,57,159,192,144,135,69,163,29,158,
135,156,77,77,141,63,33,143,124,243,37,23,204,163,6,86,56,98,77,156,
215,120,118,139,124,160,62,212,133,197,218,37,57,73,32,232,235,154,198,156,
177,142,216,30,248,85,178,236,15,72,247,47,59,73,158,221,73,149,233,150,
21,96,168,227,75,215,26,194,171,212,103,90,187,61,152,124,84,116,162,23,
215,128,251,76,83,186,173,47,60,213,31,37,30,79,10,197,147,144,235,212,
131,202,63,31,120,161,95,76,107,1,17,105,31,186,106,19,7,60,213,209,
126,44,220,94,171,127,105,11,250,199,37,234,171,47,166,67,251,219,244,88,
233,186,226,233,203,167,89,75,1,104,27,233,170,71,127,165,46,168,39,27,
255,103,106,148,97,57,91,5,10,3,29,83,35,218,109,97,147,250,115,251,
48,246,102,211,82,206,183,203,249,144,65,151,50,209,163,150,101,91,236,99,
162,98,219,239,141,100,40,90,130,166,135,57,73,193,34,18,122,77,99,127,
198,236,193,182,186,8,111,10,125,20,68,217,111,143,102,53,65,12,160,34,
119,121,194,61,65,219,173,142,27,242,177,5,48,193,134,103,208,54,12,224,
243,202,182,130,85,73,189,201,127,160,93,212,167,1,156,94,212,177,9,128,
161,19,23,33,55,95,27,0,66,117,112,131,18,185,30,199,234,45,5,201,
39,14,150,60,25,196,165,160,2,67,120,245,110,142,208,159,192,235,168,248,
241,237,82,139,172,233,216,198,249,58,29,133,65,240,202,92,41,195,187,242,
140,97,252,13,85,238,14,97,19,120,63,97,83,73,79,88,151,68,181,234,
0,33,14,147,117,176,188,27,5,85,79,4,123,9,238,48,31,105,8,150,
91,170,249,145,241,108,119,115,43,171,43,183,178,101,66,182,147,55,80,169,
51,74,198,224,154,196,20,48,9,169,128,163,42,246,188,223,234,137,238,76,
198,36,104,161,119,86,176,140,13,46,74,10,9,100,40,32,247,30,250,23,
68,103,143,79,242,100,152,246,111,123,103,180,72,27,0,4,231,202,95,90,
120,204,1,59,52,27,149,138,102,43,102,151,116,214,175,214,140,238,3,217,
69,117,160,6,151,167,98,121,83,183,245,245,15,60,109,90,50,182,59,129,
254,23,56,83,50,221,98,26,181,97,130,105,70,2,54,148,28,238,85,210,
60,143,47,163,48,135,41,89,215,175,207,92,154,210,12,48,138,32,238,90,
140,220,103,210,224,82,103,55,69,139,19,151,217,119,120,155,220,25,96,186,
204,109,179,54,89,189,101,151,126,222,1,213,22,213,198,21,148,219,165,103,
1,16,214,129,150,74,2,32,59,210,171,14,11,71,83,63,30,115,65,2,
129,152,79,43,187,177,197,141,120,67,10,91,71,142,233,169,144,103,12,52,
22,161,95,243,101,218,106,217,16,156,88,159,252,141,91,187,198,241,222,43,
182,162,8,239,143,53,145,38,25,88,66,137,91,186,208,138,252,180,46,47,
27,210,112,191,204,6,19,220,232,229,205,211,11,17,254,34,87,255,83,201,
58,65,92,187,157,85,134,148,201,72,148,219,110,149,119,206,194,109,241,139,
181,248,41,69,72,132,113,232,159,107,130,47,44,38,107,179,146,254,112,134,
23,51,50,143,251,80,87,4,34,59,190,67,37,135,242,164,213,254,33,238,
109,77,7,211,222,250,122,238,147,117,139,74,6,211,114,77,251,110,184,164,
36,175,45,122,21,73,141,222,41,14,60,212,74,167,213,242,115,134,116,110,
31,32,135,142,9,48,19,252,103,125,32,153,119,92,238,227,196,73,249,193,
83,153,80,233,196,151,133,35,193,21,105,79,88,9,102,229,104,48,40,132,
128,98,33,109,185,130,237,162,86,112,56,251,116,255,230,40,234,85,242,24,
210,253,177,86,132,114,36,85,191,31,36,177,71,161,138,56,0,57,220,102,
84,152,49,189,66,134,196,181,211,61,235,193,102,238,141,84,141,243,211,76,
125,133,150,79,5,174,206,207,84,104,63,248,42,58,141,64,135,24,67,115,
23,237,73,31,112,20,38,220,130,43,202,105,102,75,160,202,197,82,14,167,
50,150,148,198,168,163,78,5,160,84,81,178,84,111,255,87,149,12,37,169,
20,1,197,228,18,52,86,172,213,35,124,48,11,127,85,217,130,192,43,28,
255,234,245,31,170,122,234,107,176,165,73,5,26,115,38,250,107,161,139,242,
73,4,10,35,194,128,228,242,208,114,229,154,170,76,112,68,64,188,136,143,
81,115,159,163,13,249,169,34,51,171,191,30,120,186,146,2,50,213,171,203,
143,123,34,197,185,169,80,235,189,52,213,170,57,48,71,178,140,115,53,124,
124,133,38,69,125,148,241,118,166,156,249,10,29,243,142,97,219,63,33,190,
207,164,229,173,223,240,248,86,218,172,167,84,46,55,9,36,183,28,186,123,
95,184,98,10,193,81,66,41,210,248,122,52,168,9,25,110,238,37,170,101,
91,105,198,98,132,160,245,121,73,222,129,54,18,117,182,127,33,8,174,61,
242,88,159,189,123,41,233,134,197,110,1,228,27,8,174,219,143,209,120,102,
155,57,238,77,103,5,205,224,201,167,150,23,166,189,241,176,4,48,177,73,
245,59,130,215,71,179,100,61,178,176,93,158,215,72,248,239,123,204,186,179,
171,155,217,111,236,235,233,35,253,90,251,31,199,65,154,239,177,32,115,89,
36,241,169,161,109,212,24,82,95,120,50,5,154,112,1,57,212,238,89,61,
170,182,39,228,180,186,250,215,80,226,164,228,113,89,211,238,143,87,78,90,
150,236,31,238,205,173,234,222,4,70,33,255,78,234,125,156,234,121,231,98,
190,70,82,147,249,89,231,99,181,20,47,76,155,252,197,104,99,61,251,167,
55,100,167,200,179,20,252,180,206,205,101,70,184,201,213,147,112,243,158,155,
27,58,121,201,89,246,232,180,217,100,174,65,185,125,183,5,167,184,116,76,
116,50,117,218,162,20,15,11,92,237,152,25,62,22,211,49,177,252,207,49,
149,77,119,56,237,166,151,150,121,185,205,105,41,212,187,33,0,143,21,17,
155,92,52,134,99,92,173,113,247,49,39,228,95,29,60,89,199,66,117,127,
128,103,114,246,234,225,80,105,254,126,124,142,218,121,197,15,16,121,121,156,
117,178,12,213,226,158,235,192,83,193,128,86,148,156,74,43,234,175,142,247,
233,185,202,68,30,200,30,68,145,246,165,66,231,94,210,22,48,122,239,172,
44,174,82,185,147,232,200,181,16,170,22,149,180,228,7,63,63,139,168,90,
116,241,18,80,254,118,62,131,59,253,124,245,5,15,116,203,222,205,225,58,
118,22,113,54,116,68,129,225,104,142,128,244,13,157,240,99,221,3,85,54,
93,116,6,121,36,18,36,97,217,13,254,5,235,167,242,175,228,30,40,210,
153,58,92,205,243,215,57,255,159,18,244,95,209,18,79,166,226,12,181,2,
110,5,58,162,114,224,209,40,226,170,43,253,37,253,38,181,129,208,60,155,
207,190,204,69,55,107,227,192,44,202,26,102,139,25,132,212,193,67,150,245,
240,144,176,11,52,254,150,111,86,185,227,181,238,12,131,54,20,120,248,113,
5,41,132,85,159,51,108,237,195,89,75,157,180,251,199,188,66,39,50,196,
213,141,175,37,240,148,254,189,79,52,243,181,2,11,26,59,33,78,182,177,
23,129,33,16,120,56,8,179,158,121,125,30,166,230,150,147,191,252,53,162,
182,195,26,61,204,146,61,179,9,17,2,41,142,145,102,129,171,231,104,115,
236,180,80,155,51,222,58,205,183,66,255,14,119,43,55,228,162,178,223,151,
85,126,25,122,176,78,0,234,94,189,68,132,164,77,136,69,44,5,36,190,
40,216,174,222,167,154,30,0,212,10,204,240,134,174,184,156,56,170,210,243,
199,209,162,213,144,179,143,145,4,103,249,66,216,139,143,28,191,66,115,213,
73,24,1,22,32,157,224,16,148,214,187,241,193,129,41,222,82,232,125,220,
113,158,227,181,126,68,125,181,25,192,19,188,250,178,111,26,45,5,7,252,
102,41,16,147,74,223,92,34,220,101,190,208,240,249,141,7,72,139,44,202,
119,18,0,28,116,220,187,70,187,77,181,4,5,206,191,52,5,178,10,46,
246,84,128,23,62,176,119,116,86,230,232,61,125,37,181,167,90,222,216,4,
89,134,104,5,253,71,144,13,182,7,6,98,187,19,102,171,224,36,135,106,
60,3,212,235,50,233,64,246,225,184,154,30,158,115,196,55,139,197,19,246,
200,84,148,90,28,12,47,118,156,60,17,255,132,177,239,99,131,250,144,229,
83,225,150,154,163,171,107,201,33,66,72,56,202,36,46,29,91,218,85,160,
254,193,198,105,42,173,124,48,192,219,189,251,141,80,238,211,131,194,14,228,
232,120,8,166,237,90,117,174,146,195,220,30,212,217,57,85,30,57,120,107,
29,189,84,84,128,225,218,162,226,134,132,18,57,167,184,48,136,2,131,43,
42,124,194,152,178,135,237,121,198,137,66,219,51,213,225,132,179,255,25,141,
99,78,253,148,35,31,217,95,149,175,238,3,100,62,217,178,111,66,33,229,
121,255,183,228,124,73,61,74,191,165,142,254,49,82,163,166,233,169,104,79,
49,111,49,124,212,48,250,45,166,152,202,128,5,49,71,96,218,166,92,190,
210,171,180,123,119,27,58,239,129,186,64,82,31,72,70,50,224,28,207,8,
54,229,110,238,41,198,205,198,16,234,170,76,45,102,191,152,232,255,142,91,
21,112,213,239,70,75,170,248,69,117,172,3,195,19,207,138,28,34,70,58,
71,24,41,153,166,147,125,65,56,174,204,95,134,104,3,184,47,52,30,254,
147,172,53,122,51,117,151,124,4,222,143,165,139,103,217,20,39,156,92,135,
160,202,3,55,228,98,213,82,136,153,203,226,172,219,197,131,49,164,133,4,
128,19,221,141,76,247,54,8,45,31,37,188,94,155,122,11,247,177,107,69,
163,173,175,13,73,184,214,176,173,121,182,225,31,119,142,55,222,24,188,114,
73,210,74,25,51,197,149,19,186,126,111,32,247,142,109,79,117,219,223,136,
89,17,14,129,231,66,136,111,249,39,185,60,162,175,233,148,227,23,108,151,
218,218,187,47,158,40,234,161,15,88,104,33,46,222,235,218,207,240,73,161,
57,243,253,222,114,116,202,206,184,106,87,131,59,163,38,78,214,162,83,158,
77,161,68,196,229,206,156,86,68,197,82,225,159,180,23,210,133,111,8,49,
0,137,20,164,115,50,147,51,128,99,118,21,52,193,58,160,127,130,61,199,
168,41,157,58,14,154,37,205,189,159,50,121,138,46,68,233,77,227,184,110,
164,158,129,16,33,223,134,236,190,140,254,153,206,214,58,221,207,221,133,26,
144,34,2,224,45,20,95,19,72,99,71,63,235,118,157,98,67,22,250,188,
169,202,252,153,128,207,91,195,13,111,221,14,136,242,255,254,66,12,111,2,
22,213,82,176,35,174,244,221,30,156,173,1,12,199,31,66,249,42,74,1,
90,42,60,253,194,245,179,100,37,47,31,115,29,195,49,166,191,229,19,49,
9,55,132,210,245,46,176,113,107,175,36,60,40,162,95,217,112,92,55,129,
183,23,245,87,249,225,54,14,85,111,192,107,177,4,244,51,56,86,152,124,
123,60,98,178,81,119,86,23,87,79,68,54,223,47,197,36,248,162,240,1,
30,173,168,44,148,144,210,247,237,203,128,252,192,5,104,216,144,65,6,62,
82,238,28,223,4,13,180,82,156,150,216,122,121,2,144,131,135,58,29,58,
237,254,58,124,71,157,188,202,6,8,86,16,205,158,227,21,149,220,86,27,
29,159,156,38,104,84,216,165,49,237,247,62,88,242,43,19,18,206,161,190,
182,73,255,38,74,170,62,213,129,224,196,233,229,242,107,7,17,26,139,173,
141,36,92,36,17,2,169,74,148,70,31,41,8,150,71,83,224,44,97,214,
191,251,171,72,18,239,241,206,62,253,67,189,108,68,50,239,64,183,120,51,
55,19,200,139,74,181,36,41,182,83,211,52,200,78,186,36,247,185,232,77,
222,10,159,13,241,62,207,248,207,172,233,101,214,232,196,181,42,97,141,157,
141,235,147,114,24,228,238,18,155,181,109,229,130,115,12,155,19,139,16,167,
238,131,49,195,67,63,237,206,61,141,248,187,52,63,109,240,176,108,163,234,
56,194,129,162,224,219,43,101,30,107,144,166,144,232,5,51,194,59,249,177,
124,63,77,20,17,70,151,207,151,12,97,107,189,80,95,143,84,61,17,115,
50,131,172,147,235,165,161,68,140,107,22,242,194,248,196,168,159,34,1,251,
84,55,210,214,77,69,144,209,90,86,21,26,194,191,88,28,252,202,167,142,
78,78,105,103,79,173,130,209,234,240,219,199,118,156,99,95,190,169,237,94,
21,171,19,87,23,140,248,41,1,223,150,229,167,176,69,69,72,77,224,193,
21,229,64,54,12,36,102,12,27,48,243,110,204,21,56,100,203,88,184,143,
253,37,190,4,173,214,39,140,52,221,180,25,212,185,12,92,45,251,195,60,
35,133,16,81,103,231,189,23,78,114,33,15,55,245,230,17,105,118,184,32,
128,30,21,51,242,110,74,237,114,176,154,65,199,114,226,251,246,151,66,2,
101,39,226,65,187,23,36,120,86,130,101,240,252,199,80,171,205,87,199,38,
119,96,76,162,175,210,125,124,42,7,142,181,166,63,4,29,215,66,121,242,
230,195,89,83,93,78,46,252,213,121,170,152,94,242,217,123,182,80,54,104,
218,76,242,22,252,193,11,79,160,154,76,67,253,69,221,74,185,60,167,216,
16,59,41,112,75,100,152,21,106,253,138,150,128,25,165,34,41,11,184,175,
107,70,212,1,116,143,104,82,14,29,167,102,153,96,179,232,233,39,147,53,
141,176,34,180,186,166,180,15,63,52,97,85,84,21,242,26,151,173,244,56,
187,240,142,93,28,93,48,126,227,142,45,247,151,59,2,179,201,55,122,86,
38,201,43,169,186,50,47,31,167,14,82,223,4,57,127,135,92,239,39,83,
108,71,213,230,49,108,102,183,21,42,172,181,26,207,140,0,193,234,201,59,
89,44,144,199,146,143,170,33,174,16,240,254,184,232,215,237,187,222,235,227,
166,149,113,244,42,27,216,215,206,126,7,201,86,6,192,24,241,206,50,30,
123,51,58,161,128,143,173,41,199,160,238,82,173,125,25,202,186,248,210,198,
15,10,60,172,185,108,155,25,17,203,82,88,194,209,153,169,130,138,74,34,
155,163,75,158,249,144,87,6,2,32,133,173,241,117,58,104,148,26,219,43,
198,153,214,97,147,75,222,58,255,22,74,243,179,254,237,145,131,122,40,207,
140,252,193,100,168,126,30,155,107,160,69,1,72,107,36,175,149,21,90,115,
60,45,4,228,62,2,210,8,227,193,191,139,186,67,36,115,170,199,162,212,
183,30,193,26,180,242,87,141,129,55,113,44,1,93,224,154,156,25,104,127,
215,59,33,222,61,219,117,228,52,0,117,36,100,208,241,160,136,94,50,124,
164,26,9,245,29,186,119,144,230,125,129,153,195,10,72,223,159,15,190,102,
196,23,58,124,83,101,47,77,43,225,224,59,97,168,179,35,224,216,87,167,
102,184,48,181,44,47,253,171,187,26,112,61,157,130,52,5,217,44,219,104,
99,201,219,28,173,184,175,222,159,218,120,213,26,245,71,167,60,168,191,50,
63,250,115,112,70,142,190,213,62,16,97,224,220,42,96,230,145,208,24,225,
51,138,184,156,54,37,95,233,66,36,96,29,49,150,3,218,11,198,10,7,
63,93,109,6,168,22,70,246,172,48,224,149,122,136,236,167,159,241,139,212,
46,65,50,163,103,55,150,91,122,103,220,7,141,96,33,235,186,99,53,19,
175,51,105,218,213,136,93,66,112,125,53,255,25,93,245,10,13,78,84,143,
232,230,41,45,76,208,80,26,106,7,123,200,222,252,226,91,169,157,189,135,
121,248,173,119,187,246,214,165,35,136,205,192,234,131,219,237,149,6,18,43,
244,253,0,9,150,118,185,11,222,148,235,26,187,1,124,96,243,157,48,23,
253,55,235,212,220,237,23,235,244,11,43,202,248,194,42,69,193,160,183,152,
99,100,21,234,237,217,125,102,67,116,227,206,193,10,89,14,93,248,208,226,
234,113,37,208,251,89,152,21,99,47,181,51,167,166,11,7,250,101,80,164,
82,61,115,182,236,14,222,72,209,95,130,238,108,253,18,131,229,230,17,27,
17,121,233,39,34,39,216,226,129,1,164,201,104,255,66,51,206,10,96,91,
222,157,84,252,98,33,77,91,130,214,29,186,117,181,61,248,202,126,233,75,
84,33,105,200,245,51,149,202,9,35,139,205,239,205,21,69,41,73,185,129,
1,151,3,231,204,139,56,196,158,192,101,102,249,197,254,220,10,136,49,230,
22,209,87,243,180,161,186,157,18,243,91,197,120,224,60,77,103,241,92,176,
31,54,118,118,44,190,204,129,222,44,210,114,191,41,233,205,160,101,89,231,
224,154,68,245,93,141,151,187,45,88,22,239,210,43,158,188,91,185,243,193,
74,184,186,83,166,115,125,198,106,21,209,140,78,116,28,99,14,3,138,228,
24,45,140,208,191,205,110,212,40,42,253,105,78,149,26,241,189,13,107,117,
141,128,142,241,135,245,225,209,75,42,124,48,180,166,246,240,245,19,42,254,
235,248,180,200,138,4,29,121,204,165,99,44,199,126,33,241,172,49,155,59,
183,247,6,150,163,227,78,54,4,191,38,124,46,6,151,13,197,172,200,197,
239,190,119,232,157,52,148,19,82,3,9,168,90,132,108,42,27,89,116,207,
129,100,7,181,47,125,122,213,106,187,16,60,21,136,148,165,214,103,182,230,
1,7,165,197,33,182,202,98,102,145,33,208,133,139,22,28,97,246,100,33,
6,149,185,98,130,2,118,202,252,227,206,0,182,101,116,21,93,120,202,204,
97,58,74,86,46,217,89,249,235,105,175,198,204,21,243,97,77,120,71,137,
222,238,100,141,97,111,121,65,64,132,205,91,253,131,188,94,29,77,46,11,
39,242,230,98,17,98,202,22,227,66,108,158,17,205,19,233,104,5,206,164,
99,185,220,69,194,206,31,144,247,141,127,163,36,94,19,1,207,70,213,231,
130,225,42,204,106,86,154,189,35,213,176,35,67,6,217,209,71,170,170,76,
229,69,236,82,37,148,77,233,38,42,185,18,191,95,52,207,133,154,152,67,
94,98,15,49,191,224,176,102,187,35,42,76,19,143,105,108,32,196,207,134,
215,139,111,188,1,12,66,77,66,149,173,203,218,225,86,70,156,78,156,161,
95,100,52,217,52,112,55,172,64,106,233,235,199,21,106,168,3,126,67,108,
66,243,230,116,203,227,149,33,1,126,161,55,10,160,160,141,252,104,56,21,
100,33,129,62,130,60,248,28,86,237,214,85,110,230,180,2,91,206,56,213,
251,237,227,236,164,83,158,19,165,14,254,167,157,69,14,67,182,111,144,37,
220,215,5,232,113,10,212,24,38,40,235,19,250,38,128,250,171,211,5,2,
107,184,28,239,180,102,52,79,179,218,222,21,78,248,127,57,57,89,223,191,
188,178,103,42,82,3,246,209,177,42,188,99,16,60,152,124,161,138,106,40,
242,180,187,234,184,140,206,100,122,47,124,249,35,85,65,200,188,135,99,75,
219,71,68,219,89,186,123,92,21,64,88,182,139,34,107,232,248,236,57,67,
43,97,82,87,83,214,238,15,210,75,18,242,100,125,215,156,142,123,238,48,
241,128,210,251,189,164,200,159,66,113,91,93,6,94,66,252,183,103,163,101,
150,114,25,81,24,79,159,170,254,219,87,36,205,100,162,124,106,26,64,86,
158,168,149,92,12,102,139,43,178,255,189,27,235,50,22,216,217,144,234,215,
121,72,100,30,114,163,127,17,152,80,182,166,105,223,236,181,255,205,211,141,
24,132,217,106,26,240,60,46,30,213,119,25,212,74,253,176,96,231,232,46,
241,34,195,19,208,245,249,27,231,83,69,160,177,196,199,26,79,226,68,144,
111,43,47,146,105,166,134,2,73,240,195,206,68,44,223,45,88,134,241,130,
142,131,47,86,185,69,1,225,26,79,240,35,234,46,229,156,148,132,242,146,
148,133,239,127,2,7,103,226,89,92,249,38,4,43,226,209,99,218,83,192,
239,81,51,2,193,100,1,205,55,177,126,25,219,56,49,154,193,29,150,130,
126,58,70,18,27,223,177,61,81,15,218,164,166,52,59,23,186,234,33,129,
54,231,44,225,109,248,40,56,189,11,219,19,70,241,187,21,235,143,88,58,
30,101,133,14,251,87,216,221,173,117,22,44,252,44,72,250,205,113,52,100,
82,141,39,133,134,197,9,4,80,45,36,12,212,90,197,219,15,172,12,106,
10,160,204,233,245,64,137,79,49,68,108,216,131,0,30,119,229,38,125,68,
103,91,165,172,118,72,21,45,229,184,192,44,80,136,7,79,18,22,172,45,
4,3,37,205,118,117,62,95,95,182,4,128,21,55,208,42,120,9,123,233,
230,54,225,88,151,191,252,163,72,96,136,20,100,8,158,148,246,78,117,240,
195,156,29,64,128,42,193,79,65,119,64,163,94,55,103,216,7,136,48,227,
17,49,255,184,164,23,200,45,240,114,173,221,53,49,165,212,147,209,151,82,
176,179,113,123,252,220,12,78,95,99,43,231,233,163,79,247,203,207,77,139,
246,10,72,61,172,239,200,186,126,238,25,130,148,67,234,41,86,164,176,182,
111,241,226,42,210,154,164,21,20,238,71,7,191,212,155,14,117,191,142,12,
52,110,16,47,51,249,250,126,99,60,169,219,158,30,240,97,208,138,237,30,
108,96,71,95,165,2,222,164,174,137,175,53,236,124,144,206,196,174,242,138,
255,238,139,237,101,162,236,246,110,88,84,78,248,39,159,159,37,172,22,5,
204,31,190,71,161,170,162,63,245,208,19,23,106,153,39,77,209,205,145,47,
56,68,226,123,140,11,24,152,99,206,2,151,22,114,212,204,146,31,250,91,
101,185,192,66,201,52,182,190,5,170,114,79,63,231,37,59,52,26,120,207,
163,220,5,227,39,22,65,229,194,224,173,127,43,217,232,230,164,238,134,1,
182,102,107,147,152,63,236,228,175,253,135,110,209,224,140,121,112,29,239,209,
121,36,38,128,77,179,0,217,102,209,162,12,173,24,32,73,221,204,94,21,
239,28,128,70,250,43,133,138,179,59,130,202,193,182,175,158,74,167,14,70,
225,252,45,255,73,200,36,151,170,188,24,64,154,142,7,234,209,150,200,37,
137,61,97,35,234,109,103,95,145,139,150,37,199,110,135,41,250,207,168,195,
33,39,5,220,140,219,46,203,43,82,161,151,221,206,40,85,6,175,111,209,
7,24,110,51,50,91,105,114,199,138,191,232,103,91,24,81,83,145,16,116,
131,71,199,214,111,145,64,108,109,2,162,193,134,32,196,246,29,21,140,193,
201,82,160,14,36,60,54,66,177,164,1,59,119,9,121,131,83,131,140,196,
59,184,46,133,88,159,228,27,232,134,141,7,174,207,119,149,7,172,215,5,
30,164,123,70,72,84,146,137,111,181,116,186,205,156,220,133,192,143,131,205,
216,58,31,241,55,149,164,177,64,10,65,32,68,186,42,80,94,30,194,17,
0,82,189,39,72,189,218,125,113,152,152,201,148,243,188,81,186,17,121,126,
5,191,91,90,129,128,201,89,194,56,66,16,21,243,232,23,18,60,86,93,
21,134,21,165,169,212,109,216,160,204,220,212,13,216,132,160,104,161,180,113,
163,127,178,105,19,73,31,29,87,53,70,40,199,149,1,17,7,27,82,175,
232,244,102,164,24,181,226,44,64,75,96,184,210,154,249,88,47,17,210,19,
133,179,31,183,153,143,195,250,131,101,255,60,162,63,204,6,101,196,19,161,
131,114,25,19,69,78,77,123,247,91,154,240,208,179,99,41,15,177,164,16,
83,141,237,92,117,22,186,166,57,79,72,155,97,228,188,91,151,90,196,169,
202,35,8,105,175,58,57,5,162,103,214,138,149,14,118,10,27,22,121,92,
95,86,25,3,59,41,78,104,134,237,19,146,91,51,94,229,93,120,133,115,
63,219,132,24,200,0,40,168,223,220,240,19,163,126,174,194,40,55,152,248,
116,162,90,210,50,92,116,46,89,253,51,196,197,72,192,119,80,159,114,195,
37,41,231,40,86,13,5,225,115,244,65,115,232,18,27,54,43,253,57,184,
230,254,160,106,139,44,71,142,246,97,232,114,227,71,148,103,205,244,105,250,
26,138,0,95,10,247,199,148,244,216,146,62,140,171,87,238,215,60,123,208,
102,165,156,51,32,211,230,200,226,240,120,228,81,134,209,175,42,214,131,188,
147,60,136,167,149,143,150,224,103,52,11,99,176,227,93,120,124,192,16,211,
113,179,50,227,253,206,102,83,57,71,246,197,223,117,8,195,145,9,76,195,
236,108,27,171,200,124,206,243,168,191,55,64,220,32,252,52,58,100,46,227,
78,193,88,40,2,154,174,141,210,206,124,242,139,73,247,239,6,15,158,4,
233,232,98,46,136,156,152,227,214,242,159,5,34,252,28,231,253,155,76,17,
241,127,70,13,90,113,149,72,167,95,101,145,153,187,255,164,94,101,113,184,
211,54,186,211,148,224,206,60,36,179,49,219,71,77,240,15,233,217,120,78,
74,211,230,15,166,108,152,173,75,2,188,234,233,45,218,138,39,9,20,57,
158,17,103,69,117,171,187,76,182,161,184,246,115,118,181,105,18,133,149,150,
192,190,81,158,1,26,86,238,127,210,234,225,230,234,92,125,220,23,103,181,
183,186,56,129,11,150,132,238,113,208,36,56,50,55,74,146,187,83,134,255,
232,251,138,138,77,202,193,71,38,237,148,115,213,100,93,165,222,231,161,138,
110,155,159,60,155,245,170,110,233,236,37,30,207,215,137,60,117,57,126,254,
187,71,136,162,107,120,195,2,27,67,92,6,70,66,10,127,247,29,190,248,
18,35,53,54,70,12,36,66,215,182,14,43,77,250,233,24,203,128,199,99,
216,232,88,41,75,15,135,139,200,42,226,21,240,161,199,91,132,227,206,26,
62,252,181,108,77,146,135,149,185,166,229,142,140,92,25,59,98,105,214,46,
147,185,228,236,242,149,104,24,99,44,115,101,74,149,65,15,115,108,62,78,
238,106,60,59,147,204,51,128,133,82,62,203,97,103,58,166,187,142,254,184,
225,170,243,149,239,197,90,212,57,217,132,212,150,48,188,59,174,10,0,2,
67,54,115,218,63,189,165,67,161,49,89,30,159,24,225,157,243,192,157,246,
97,81,67,127,210,151,205,27,128,20,187,36,59,8,92,157,190,44,31,200,
47,188,210,237,101,181,125,10,115,46,241,90,107,186,239,13,55,168,120,55,
18,44,99,78,164,178,203,123,115,28,16,113,163,86,175,130,156,103,114,124,
94,2,216,57,32,187,28,5,78,203,86,208,79,128,206,38,200,212,137,255,
120,4,51,18,112,54,36,172,210,108,215,199,248,162,183,71,10,32,239,88,
18,151,217,191,137,101,190,199,133,209,68,167,234,154,170,189,189,144,48,23,
58,154,114,125,89,95,76,136,249,79,43,86,117,104,176,46,242,29,241,137,
203,45,71,7,105,16,34,194,229,92,178,62,41,45,77,24,236,53,198,134,
127,208,204,94,219,205,86,40,36,50,116,250,32,63,10,207,155,92,8,177,
246,230,96,223,154,43,3,141,241,234,71,161,117,218,89,251,156,193,21,249,
154,89,185,233,31,42,0,84,168,154,56,143,50,50,151,56,171,84,110,130,
251,110,194,115,116,254,100,246,135,180,1,4,52,243,47,116,244,48,47,51,
191,117,161,138,144,43,24,214,30,161,142,13,114,149,102,51,93,217,238,179,
90,104,191,37,183,13,101,90,226,81,120,116,144,165,189,143,59,172,54,58,
217,83,210,100,17,27,39,249,210,216,153,186,75,154,25,200,75,0,236,252,
189,53,163,91,209,122,239,225,18,76,11,131,102,154,31,161,105,252,4,143,
186,15,226,112,130,125,177,129,251,146,145,214,112,110,137,188,186,123,17,106,
39,4,162,16,116,189,65,77,93,28,32,81,193,26,203,100,156,5,84,124,
57,183,155,93,121,5,251,56,136,16,206,198,64,161,73,69,84,225,155,54,
164,58,198,24,213,20,182,16,42,1,190,227,87,208,23,203,104,90,54,72,
253,63,144,74,89,6,111,180,124,86,67,172,75,58,250,244,170,155,81,244,
48,4,217,77,14,140,121,101,100,81,13,73,222,123,31,251,32,63,174,119,
8,122,227,27,48,184,45,169,55,228,213,4,166,34,187,100,251,74,12,146,
165,209,17,41,116,125,56,87,120,98,3,237,52,38,13,198,136,241,38,136,
55,223,254,235,250,122,243,25,29,25,249,30,251,147,99,92,12,50,181,30,
247,68,69,212,227,178,211,21,89,250,76,70,169,109,118,73,141,144,237,81,
89,54,227,237,70,65,249,250,119,183,21,154,103,251,83,157,27,134,217,1,
1,68,212,203,81,165,160,46,49,118,117,69,246,46,93,101,251,224,126,217
    };
    result["big"] = std::string(reinterpret_cast<const char*>(buffer), 40000);
    return result;
  }

class MockInputStream: public InputStream {
public:
  ~MockInputStream();
  MOCK_CONST_METHOD0(getLength, uint64_t());
  MOCK_CONST_METHOD0(getName, const std::string&());
  MOCK_METHOD3(read, void (void*, uint64_t, uint64_t));
  MOCK_CONST_METHOD0(getNaturalReadSize, uint64_t());
};

MockInputStream::~MockInputStream() {
  // PASS
}

TEST(TestMatch, serializedConstructor) {
  orc::ReaderOptions opts;
  std::string filename = findExample("demo-12-zlib.orc");

  // open a file
  std::unique_ptr<orc::Reader> reader =
    orc::createReader(orc::readLocalFile(filename), opts);

  // for the next reader copy the serialized tail
  std::string tail = reader->getSerializedFileTail();
  opts.setSerializedFileTail(tail);

  // We insist on no calls to the input stream when looking at the file
  // information.
  MockInputStream *fakeStream = new MockInputStream();
  EXPECT_CALL(*fakeStream, getLength()).Times(0);
  EXPECT_CALL(*fakeStream, getName()).Times(0);
  EXPECT_CALL(*fakeStream, read(testing::_, testing::_, testing::_)).Times(0);

  std::unique_ptr<orc::Reader> reader2 =
    orc::createReader(std::unique_ptr<InputStream>(fakeStream), opts);

  EXPECT_EQ(1920800, reader2->getNumberOfRows());
  EXPECT_EQ(CompressionKind_ZLIB, reader2->getCompression());
}

}  // namespace
